Java 5.0 新特性总结 三 泛型
2011-01-05 22:46
519 查看
1.
泛型:ArrayList<String>
和ArrayList<Intger>
在编译以后使用的是同一份字节码。(也就是说,通过java
的反设,可以穿过泛型,给工程可能带来未知的错误和异常)。
a)
泛型术语:整个成为ArrayList<E>
泛型类型
b)
ArrayList<E>
中的E
称为类型变量或类型参数
c)
整个ArrayList<Integer>
中的Integer
称为类型参数的实例或实际类型参数
d)
ArrayList<Integer>
中的<>
念typeof
e)
ArrayList
称为原是类型。
2.
java
中泛型中的通配符 ? 。 在泛型中的类型参数不能考虑子类父类关系。在使用通配符的对象中,就不能使用该对象一切,涉及到对象类型的方法。通配符的扩展,Vector<? Extends Number> x = new Vector<Integer>();
这个说明?的类型参数在Number
的这个范围里面。只要在Number
的范围中就可以。另外的一种是Vector<?
Super
Integer> x =new Vector<Number>();
这个说明,必须是Integer
上面的包里面的都可以。
泛型的小例子:
在Map
的集合中,都是键值一一对应的。其实Map
中每一个键值都是一个Map.Entry
对象。定义一个HashMap
的泛型其实就是定义了Map
中Entry
对象的泛型。然后通过迭代方法,得到Map
中的键值对应。
3.
自定义泛型 ,public
<T extends Map> T abc()
这样的定义了一个类型T
,同时也说明了T
是Map
的子类。
a)
泛型的定义中,不能有基本类型做为参数
。
4.
对于泛型的集合和自定义泛型集合,我没有能够有太多的理解,只是知道如果定义一个自定义的类型。如何限制它的范围。但通过泛型这节课我对泛型的理解更加深刻和系统了。
5.
定义累计别的泛型,public
class test<T>
这样定义,这样定义以后整个类中的泛型就统一了。
6.
通过反射去知道泛型集合的里面的类型参数,通过对象是不能实现的。要通过方法才能知道这样的集合中泛型的类型具体是什么,代码的编程思想是,现通过java
的字节码获取某一个方法的Method
,然后可以获得Method
,以泛型的方式获得参数类型。这样,我们就可以获得参数类型和实际参数类型了。通过这个方法很多这个框架实现了自动的封装JavaBean
的功能。
泛型:ArrayList<String>
和ArrayList<Intger>
在编译以后使用的是同一份字节码。(也就是说,通过java
的反设,可以穿过泛型,给工程可能带来未知的错误和异常)。
a)
泛型术语:整个成为ArrayList<E>
泛型类型
b)
ArrayList<E>
中的E
称为类型变量或类型参数
c)
整个ArrayList<Integer>
中的Integer
称为类型参数的实例或实际类型参数
d)
ArrayList<Integer>
中的<>
念typeof
e)
ArrayList
称为原是类型。
2.
java
中泛型中的通配符 ? 。 在泛型中的类型参数不能考虑子类父类关系。在使用通配符的对象中,就不能使用该对象一切,涉及到对象类型的方法。通配符的扩展,Vector<? Extends Number> x = new Vector<Integer>();
这个说明?的类型参数在Number
的这个范围里面。只要在Number
的范围中就可以。另外的一种是Vector<?
Super
Integer> x =new Vector<Number>();
这个说明,必须是Integer
上面的包里面的都可以。
泛型的小例子:
package com.day2; import java.util.HashMap; import java.util.Map; import java.util.Set; @ItcastAnnotation(clzz=AnnotationTest.class,value="str",j=@Shouji("moto")) public class AnnotationTest<T> { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){ ItcastAnnotation an=AnnotationTest.class.getAnnotation(ItcastAnnotation.class); System.out.println(an); System.out.println(an.w()); System.out.println(an.j().value()); } HashMap<String,Integer> maps=new HashMap<String,Integer>(); maps.put("tianzhw", 26); maps.put("shangdi", 100000); maps.put("laji", 999999999); Set<Map.Entry<String, Integer>> setEntry=maps.entrySet(); for(Map.Entry<String, Integer> entry: setEntry) { System.out.println(entry.getKey() + ":" + entry.getValue()); } } }
在Map
的集合中,都是键值一一对应的。其实Map
中每一个键值都是一个Map.Entry
对象。定义一个HashMap
的泛型其实就是定义了Map
中Entry
对象的泛型。然后通过迭代方法,得到Map
中的键值对应。
3.
自定义泛型 ,public
<T extends Map> T abc()
这样的定义了一个类型T
,同时也说明了T
是Map
的子类。
a)
泛型的定义中,不能有基本类型做为参数
。
4.
对于泛型的集合和自定义泛型集合,我没有能够有太多的理解,只是知道如果定义一个自定义的类型。如何限制它的范围。但通过泛型这节课我对泛型的理解更加深刻和系统了。
5.
定义累计别的泛型,public
class test<T>
这样定义,这样定义以后整个类中的泛型就统一了。
6.
通过反射去知道泛型集合的里面的类型参数,通过对象是不能实现的。要通过方法才能知道这样的集合中泛型的类型具体是什么,代码的编程思想是,现通过java
的字节码获取某一个方法的Method
,然后可以获得Method
,以泛型的方式获得参数类型。这样,我们就可以获得参数类型和实际参数类型了。通过这个方法很多这个框架实现了自动的封装JavaBean
的功能。
相关文章推荐
- Java高级特性之泛型学习总结
- Java高级特性之泛型学习总结
- java5.0的新特性总结
- Java 5.0 新特性总结 一
- Java 5.0 新特性总结 二 annotation 注解
- Java5.0新特性06-泛型(Generic)
- java中的<?><T><E>详解Jdk5.0新特性Generic Types (泛型)
- Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
- java中的<?><T><E>详解Jdk5.0新特性Generic Types (泛型)
- 黑马程序员----------java基础知识之JDK5.0新特性总结
- 对java中的泛型详细总结
- 基于java中泛型的总结分析
- 【读书笔记】《写给大忙人看的Java SE 8》——Java8新特性总结
- 1.3 java8新特性总结
- java5.0 新特性学习
- Java 8新特性探究(六)泛型的目标类型推断
- java8 默认带的lambda 泛型函数式接口总结
- jdk1.5新特性之泛型总结1
- 【面试题】Java三大特性封装继承多态总结
- 【Java心得总结三】Java泛型上——初识泛型