步骤1,先看一个表达“字符串1<字符串2>”:
整个表达代表一个类名为“字符串2”的类。类名“字符串2”的类是类名为“字符串1”的子类。
步骤2,再看一个表达“字符串1< T >”:
整个表达代表一个类名为“T”的类。类名为“T”的类是类名为“字符串1”的子类。既然“T”是类名为“字符串1”的子类,那么是哪个子类呢?所以要用的时候,要指定确定的名字 ,声明时编译器不会检查这类名到底存不存在,但是实例化时就必须校验这类名到底存不存在了,要不到底实例化哪个子类呢?就像步骤1的一样,已经知道了类名为“字符串2”的类是类名为“字符串1”的子类。
步骤3:再看一个表达“字符串1<?>”:
该表达也代表一个类,但是类名就不指定了,但是,是类名为“字符串1”的类的任意子类。
步骤4:再看一个表达“Class<?>”:
该表达式也代表一个类,与步骤3一样,类名不指定,但是,是名字为“Class”的类的子类。但是,名字“Class”比较特殊,它代表最大的类。所以整个表达式就代表任意类,最大程度体现泛型的意义。
步骤5:再看一个表达“Class< T >”:
整个表达式代表一个类,类名为"T",是名字为“Class”的子类,但是名字“Class”比较特殊,它是最大的类。所以整个表达式就代表任意类的指定类名的子类。
Java中泛型T和Class<T>以及Class<?>的理解
最新推荐文章于 2022-08-04 11:12:32 发布