您的位置:首页 > 职场人生

黑马程序员_Java高薪技术之泛型

2013-12-14 23:33 218 查看
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

JDK1.5新特性:泛型

初级部分:

  1、在集合中不使用泛型操作

  ArrayList collection1 = new ArrayList();
  collection1.add(1); //可以添加 int 类型,编译器有警告
  collection1.add(1L);  //可以添加 Long 类型,编译器有警告
  collection1.add("abc");  //可以添加 String类型,编译器有警告
  Object obj = (Object)collection1.get(1);  //不能确定得到的结果是什么类型,使用时需要强制类型转换。

  2、在集合中使用泛型操作:

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

  //collection2.add(1);  //错误的代码,只能添加String类型数据。

  collection2.add("abc");  //正确添加

  String str = collection2.get(0);  //读取数据时不需要强制类型转换。

  3、在反射中应用泛型:

  Constructor<String> constructor = String.class.getConstructor(StringBuffer.class);
  String str = constructor.newInstance(new StringBuffer("abc"));  //不需要类型转换
  4、总结在哪里可以使用泛型:可以查JDK帮助文档
  Class Class<T>、Class Constructor<T>、Class ArrayList<E> :凡是支持泛型的类都可以使用:<T>

  高级部分:

1、泛型对类的约束只在javac编译器进行编译时起作用,编译完成后,类字节码中不再带有泛型类型。

  ArrayList<Integer> collection = new ArrayList<Integer>();
  //collection.add("abc");  //错误的代码
  collection.getClass().getMethod("add", Object.class).invoke(collection,"abc");
  System.out.println(collection3.get(0)); //打印结果为:abc
  2、泛型类型相关术语:ArrayList<E>类定义和ArrayList<Integer>类引用:

  整个称为ArrayList<E> 泛型类型

  ArrayList<E> 中的 E 称为类型变量或类型参数

  ArrayList<Integer> 称为 参数化的类型

  ArrayList<Integer> 中的 Integer 称为类型参数的实例 或 实际类型参数

  ArrayList<Integer> 中的 <> 可念成 type of

  ArrayList 称为 原始类型

  3、参数化类型与原始类型的兼容性:

  参数化类型可以引用一个原始类型的对象,编译报警告

  Collection<String> c=new vector();//可不可以就是编译器的问题。因为编译后两个类型是兼容的

  原始类型可以引用一个参数化类型的对象编译报告警告

  Collection c = new Vector<String>();

  4、参数化类型不考虑类型的继承关系

  Vector<String> v = new Vector<Object>();  //错误

  Vector<Object> v = new Vector<String>();  //也是错误的

  /***

  Vector v1=new Vector<String>();

  Vector<Object> v=v1; 

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: