一、区别

单独的 T 代表一个类型 ,而 Class 代表这个类型所对应的类,Class<?> 表示类型不确定的类

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • ? - 表示不确定的java类型

举例说明:

  • Set 表示 集合里 是 T类的实例
  • List 表示 集合里 是 E类的实例
  • List<?> 表示 集合里的对象类型不确定,未指定
  • List 同 List<?> 是一样的。

二、如何创建一个 Class 类型的实例?

就像使用非泛型代码一样,有两种方式:调用方法 Class.forName() 或者使用类常量X.class。

  • Class.forName() 被定义为返 回 Class<?>
  • 类常量 X.class 被定义为具有类型 Class,所 以 String.class 是Class 类型的

三、方法中为什么需要 T 修饰呢?

泛型的声明,必须在方法的修饰符(public,static,final,abstract等)之后,返回值声明之前。

  1. public static T request2Bean(HttpServletRequest request, Class clazz) {
  2. }

其中第一个是与传入的参数 Class 相对应的 ,相当于返回值的一个泛型,后面的 T 是返回值类型,代表方法必须返回 T 类型的(由传入的 Class 决定)