一、区别
单独的 T 代表一个类型 ,而 Class<T> 代表这个类型所对应的类,Class<?> 表示类型不确定的类
- E - Element (在集合中使用,因为集合中存放的是元素)
- T - Type(Java 类)
- K - Key(键)
- V - Value(值)
- N - Number(数值类型)
- ? - 表示不确定的java类型
举例说明:
- Set<T> 表示 集合里 是 T类的实例
- List<E> 表示 集合里 是 E类的实例
- List<?> 表示 集合里的对象类型不确定,未指定
- List 同 List<?> 是一样的。
泛型的作用:
1、用泛型:
List<T> list=new ArrayList<T>(); T t=list.get(0);
2、不用泛型:
List list = new ArrayList(); T t = (T)list.get(0);
二、如何创建一个 Class<T> 类型的实例?
就像使用非泛型代码一样,有两种方式:调用方法 Class.forName() 或者使用类常量X.class。
- Class.forName() 被定义为返 回 Class<?>
- 类常量 X.class 被定义为具有类型 Class<X>,所 以 String.class 是Class<String> 类型的
三、方法中为什么需要 <T> T 修饰呢?
泛型的声明,必须在方法的修饰符(public,static,final,abstract等)之后,返回值声明之前。
public static <T> T request2Bean(HttpServletRequest request, Class<T> clazz) { }
其中第一个 <T> 是与传入的参数 Class<T> 相对应的,相当于返回值的一个泛型,后面的 T 是返回值类型,代表方法必须返回 T 类型的(由传入的 Class<T> 决定)