“此Class对象建模的类的类型”是什么意思?

时间:2019-08-03 09:51:03

标签: java literals type-parameter

来自Java Documentation

  

T-此Class对象建模的类的类型。例如,String.class的类型为Class<String>。如果要建模的类未知,请使用Class<?>

“由此Class对象建模的类的类型”到底是什么意思?请原谅,但这对我来说似乎很奇怪,我听不懂。

2 个答案:

答案 0 :(得分:3)

您可能知道,类表示(换句话说,是 model )事物。 String代表一堆字符,FileInputStream代表文件输入流,LocalDateTime代表不带时区的日期和时间,等等。

如果您能够理解,那么您应该能够理解,有一个类代表“类”的概念,称为Class。此类是通用的。 它的单个通用参数是它代表的类。例如,Class<String>代表类StringClass<LocalDateTime>代表类LocalDateTime。这就是文档的含义。

让我们看一个具体的例子:

Class<String> clazz = String.class;
System.out.println(clazz.getName());

在第一行中,我检索了Class<String>(或Class<String>对象)的实例。现在,变量clazz中的对象表示String类!多么酷啊?我们可以通过在String上调用getName来打印clazz类的名称,如第二行所示。您还可以使用clazz做其他很酷的事情,例如查看它实现了什么接口,它的超类是什么,它具有什么方法等等。这就是我所说的“ Class<String>对象代表String类。

答案 1 :(得分:1)

T类型参数是通用参数,请参见https://docs.oracle.com/javase/tutorial/java/generics/。对于Class<T>,它是类的实例的类型。从javadoc中可以看到,此参数在几种方法中使用: T newInstance()T cast()Constructor<T> constructor()。 例如。您可以从T对象实例化Class<T>类型的新实例:

Class<String> cls = String.class;
String str = cls.newInstance();

或强制此类:

Object obj = "some string";
Class<String> cls = String.class;
String str = cls.cast(obj);