Java Class 通用表达式语法

Java Class Generic Expression Syntax

Test test1 = new Test();

here, new Test() means create new instance of class Test and assign it to reference test1.

Class<Test> test2 = Test.class;
Test test2Instance = test2.newInstance();

我无法(用文字)定义第一个陈述。另一方面,第二个陈述对我来说很清楚。

编辑

String is an instance of the class Class.

A string literal (e.g. "I am a string.") is an instance of the class String.

class literal (e.g. Hashtable.class) is an instance of the class Class.

Class<Test> test2 = Test.class;

意思是“给我代表 Test class 的 Class 对象并将其存储在变量 test2.

除了 Class 是泛型之外,这与泛型无关。这是关于 class 个对象。

Class<Test> test2 = Test.class;

此语句声明了一个名为 test2 的变量,类型为 Class<Test>。它使用此类型的唯一实例初始化此变量,使用 class 文字表达式 Test.class 引用 class Test.

Class<Test>是泛型的特定类型。从字面上看,您正在定义一个 test2 类型的变量 Class<T>T == Test.

Class<T> 是一个参数类型,它依赖于 T,如果你添加约束 T == Test 那么你在谈论一个 Class<Test> 的变量(这是一个特定的不同类型).

与子类型的多态性相比,它是正交的。如果你有

class Base { .. }
class Derived extends Base { .. }

然后你写

Derived derived = ...

您可以毫无疑问地声明您正在声明一个名为 derived 且类型为 Derived 的变量。这是同一件事,但 Class<Test> 不是 Class<T> 的子类型,而是它的特化。