黑马程序员_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
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
相关文章推荐
- 黑马程序员——java基础加强高薪技术总结
- 黑马程序员————java高薪技术---反射单元1
- 黑马程序员—java技术blog—第十一篇:泛型
- 黑马程序员-JAVA 高级技术(泛型)
- 黑马程序员_高薪技术一(java反射)
- 黑马程序员_Java高薪技术之构造方法的反射应用
- 黑马程序员-java基础06高薪技术
- 黑马程序员_java中泛型(通配符)与反射技术
- 黑马程序员_Java高薪技术1
- 黑马程序员_Java高薪技术2
- 黑马程序员 java高级技术1.5之自动装箱和拆箱(张孝祥)
- 黑马程序员之Java泛型浅说
- Java核心技术(五) —— 泛型程序设计(2)
- 黑马程序员--Java基础加强--14.利用反射操作泛型III【解析关于泛型类型的细节信息的获取方法】【Method与泛型相关的方法】【个人总结】
- 黑马程序员--java中的泛型。
- 【java核心技术卷一】泛型程序设计
- 黑马程序员_张孝祥_Java基础加强_泛型
- 黑马程序员_Java_泛型
- 【Java核心技术——泛型】
- 黑马程序员--Java基础加强--02.代码简化 书写规律I_原始数据类型【重载】【多态】【泛型】【泛型限定】【个人总结】