来自Java文档:
T - 由 Class 对象建模的类的类型。例如,字符串.class的类型为
Class<String>
。如果正在建模的类未知,请使用Class<?>
。
"由此类对象建模的类的类型"究竟是什么意思?对不起,这对我来说看起来很奇怪,我无法理解那么多。
如您所知,类表示(换句话说,模型)事物。String
表示一堆字符,FileInputStream
表示文件输入流,LocalDateTime
表示没有时区的日期和时间等。
如果你能理解这一点,那么你应该能够理解有一个类代表"类"的概念,叫做Class
。此类是通用的。它的单个泛型参数是它所表示的类。例如,Class<String>
表示类String
,Class<LocalDateTime>
表示类LocalDateTime
。这就是文档的意思。
让我们看一个具体的例子:
Class<String> clazz = String.class;
System.out.println(clazz.getName());
在第一行中,我检索了Class<String>
(或Class<String>
对象的实例)。现在变量clazz
中的对象表示String
类!这有多酷?我们可以通过在clazz
上调用getName
来打印String
类的名称,如您在第二行中看到的。你也可以用clazz
做其他很酷的事情,比如看它实现了什么接口,它的超类是什么,它有什么方法,等等。这就是我所说的"Class<String>
对象表示String
类"的意思。
T
类型参数是泛型参数,请参阅 https://docs.oracle.com/javase/tutorial/java/generics/。如果是Class<T>
,它是类的实例类型。正如你从javadoc中看到的,这个参数用在几种方法中:T newInstance()
、T cast()
、Constructor<T> constructor()
。 例如,您可以从Class<T>
对象实例化T
类型的新实例:
Class<String> cls = String.class;
String str = cls.newInstance();
或强制转换为此类:
Object obj = "some string";
Class<String> cls = String.class;
String str = cls.cast(obj);