您的位置:首页 > 编程语言 > Java开发

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
上面的包里面的都可以。

泛型的小例子:

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
的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: