不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2018-12-23 21:50  分类:Java基础 

一、区别

单独的 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> 决定)