一、泛型概述

  jdk1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制。

  好处:

  1,将运行时期的问题ClassCastException转到了编译时期。

  2,避免了强制转换的麻烦。

  什么时候用:

  当操作的引用数据类型不确定的时候。就使用泛型(<>)。将要操作的引用数据类型传入即可,其实<>就是一个用于接收具体引用数据类型的参数范围。

  在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型。

  泛型技术是给编译器使用的技术,用于编译时期。确保了类型的安全。

  运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。

  泛型的通配符:未知类型。

  二、泛型的使用

  import java.util.*;

  publicclass GenericDefineDemo4

  {

  publicstaticvoid main(String[] args)

  {

  ArrayList<String> arr=new ArrayList<String>();

  arr.add("java01");

  arr.add("java02");

  arr.add("java03");

  arr.add("java04");

  Iterator<String> it=arr.iterator();

  while(it.hasNext())

  {

  System.out.println(it.next());

  }

  }

  }

  三、泛型类

  1、格式

  class ClassName<datatype>

  {

  }

  2、优点

  便于对任何未知的的数据类型进行操作,特别适合用作工具类,避免了强制类型转换的麻烦。

  3.示例

  import java.util.*;

  publicclass GenericClass

  {

  publicstaticvoid main(String[] args)

  {

  Tools<String> tools=new Tools<String>("hello");

  System.out.println(tools.getObj());

  }

  }

  class Tools<T>

  {

  private T obj;

  public Tools(T t)

  {

  this.obj=t;

  }

  public T getObj() {

  returnobj;

  }

  publicvoid setObj(T obj) {

  this.obj = obj;

  }

  }

  四、泛型方法

  当只需要某一个方法可以接收不同类型的参数,而不是整个类的时候,就可以用到泛型方法,它将大大提高程序代码的扩展性。

  示例代码如下:

  import java.util.*;

  publicclass GenericMethod

  {

  publicstaticvoid main(String[] args)

  {

  String s="hello!Nice to meet you!";

  Integer inter=3;

  Show show=new Show();

  show.print(s);

  show.print(inter);

  }

  }

  class Show

  {

  public <Q> void print(Q q)

  {

  System.out.println(q);

  }

  }

  五、静态泛型方法

  1、格式

  public static <T> methodName(T param)

  {

  }

  2、特点

  由于静态方法不可以访问类中的泛型,如果静态方法操作的类型不确定,这可以把泛型定义在静态方法上。

  3、示例

  publicstatic <Q> void print(Q q)

  {

  System.out.println(q);

  }

  六、泛型接口

  1、格式

  interface Inter<T>

  {

  void show(T t);

  }

  2、特点

  当接口要操作的数据类型不确定的时候,就可以使用泛型接口。

  注意: www.yzyedu.com

  当实现接口的类已经确定了接口具体的类型时,创建对象时就不用再指明类型了,如:

  class InterImpl implements Inter<String>

  {

  }

  如果实现类仍不知道具体的类型,就要创建对象时指明,如:

  class InterImpl<T> implements Inter<T>

  {

  }

  InterImpl<String> im=new InterImpl<String>();

  3、示例

  import java.util.*;

  public class Test

  {

  public static void main(String[] args)

  {

  InterImpl<String> im=new InterImpl<String>();

  im.print("hello");

  }

  }

  interface Inter<T>

  {

  void print(T t);

  }

  class InterImpl<T> implements Inter<T>

  {

  public void print(T s)

  {

  System.out.println(s);

  }

  }

  七、泛型extends限定

  extends E:接收E类型或者E的子类型对象。上限一般存储对象的时候用。比如添加元素 addAll.

  八、泛型super限定 www.jx-jf.com

  super E:接收E类型或者E的父类型对象。下限。一般取出对象的时候用。比如比较器。

Java泛型的基本应用的更多相关文章

  1. Java泛型的历史

    为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...

  2. 浅析Java 泛型

    泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...

  3. Java:泛型基础

    泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...

  4. java泛型基础

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法.  Ja ...

  5. 使用java泛型设计通用方法

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ...

  6. 关于Java泛型的使用

    在目前我遇到的java项目中,泛型应用的最多的就属集合了.当要从数据库取出多个对象或者说是多条记录时,往往都要使用集合,那么为什么这么使用,或者使用时有什么要注意的地方,请关注以下内容. 感谢Wind ...

  7. 初识java泛型

    1 协变数组类型(covariant array type) 数组的协变性: if A IS-A B then A[] IS-A B[] 也就是说,java中的数组兼容,一个类型的数组兼容他的子类类型 ...

  8. 【Java心得总结四】Java泛型下——万恶的擦除

    一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...

  9. 【Java心得总结三】Java泛型上——初识泛型

    一.函数参数与泛型比较 泛型(generics),从字面的意思理解就是泛化的类型,即参数化类型.泛型的作用是什么,这里与函数参数做一个比较: 无参数的函数: public int[] newIntAr ...

  10. 初识Java泛型以及桥接方法

    泛型的由来 在编写程序时,可能会有这样的需求:容器类,比如java中常见的list等.为了使容器可以保存多种类型的数据,需要编写多种容器类,每一个容器类中规定好了可以操作的数据类型.此时可能会有Int ...

随机推荐

  1. 【HDOJ】1078 FatMouse and Cheese

    这道题目是典型的DFS+记忆化搜索, DP思想.符合:含重叠子问题,无后效性等特点. #include <cstdio> #include <cstring> #include ...

  2. COJ 0579 4020求次短路的长度

    4020求次短路的长度 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在一个地图上共有N个路口(编号分别为1到N),R条道路( ...

  3. Android的布局优化之include、merge 、viewstub

    以前在写布局的时候总是喜欢用自己熟悉的方式去写,从来也没有想过优化怎么的,后来又一次在上班的时候老大拿着我写的一个页面说我这个不行.我说这不是和设计图上的一模一样的么?怎么就不行了?然后他就跟我说了一 ...

  4. throw new DataException("检查服务器是否存在失败:" + ex);

    try            { }            catch (Exception ex)            {                LogHelper.Error(" ...

  5. 【转载】B树、B-树、B+树、B*树都是什么

    1. B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如 ...

  6. 机器学习实战__安装python环境

    环境:win7 64位系统 第一步:安装python 1.下载python2.7.3 64位 msi 版本(这里选择了很多2.7的其他更高版本导致安装setuptools失败,也不知道是什么原因,暂时 ...

  7. mysql去掉字段字符中间空格

    mysql有什么办法批量去掉某个字段字符中的空格?不仅是字符串前后的空格,还包含字符串中间的空格,答案是 replace,使用mysql自带的 replace 函数,另外还有个 trim 函数.   ...

  8. Robotium--takeScreenshot(截图)

    在Robotium中,截图的方法时调用takeScreenshot(). 但有使用你会发现明明代码里调用了solo.takeScreenshot(),但却没有截图成功,那是因为被测试的应用没有SD卡的 ...

  9. 大数据笔记04:大数据之Hadoop的HDFS(基本概念)

    1.HDFS是什么? Hadoop分布式文件系统(HDFS),被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点. 2.HDFS ...

  10. activeMQ总结

    队列模式和发布订阅模式的区别 topic只有所有订阅者都消费了,这个消息才会消失.只要有一个订阅者没有消费(持久化模式),这个消息就会存在.订阅者下线然后上线也会读取到这个消息.而且队列的话,消费能力 ...