【问题标题】:Java Class Generic Expression SyntaxJava 类通用表达式语法
【发布时间】:2015-01-26 15:59:52
【问题描述】:
Test test1 = new Test();

这里,new Test()表示创建Test类的新实例并赋值 参考 test1。

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

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

编辑

String 是 Class 类的一个实例。

字符串文字(例如“I am a string.”)是该类的一个实例 字符串

类文字(例如Hashtable.class)是类的一个实例

【问题讨论】:

    标签: java generics syntax expression


    【解决方案1】:
    Class<Test> test2 = Test.class;
    

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

    【讨论】:

    • .@JB Nizet 你在你的回答中包含了“类文字表达”给我线索,我用谷歌搜索它并找到一个链接stackoverflow.com/questions/2160788/…,我得到了我想要的。
    • Test.class 确实是一个类文字。就像1 是整数文字,"hello" 是字符串文字一样。
    【解决方案2】:
    Class<Test> test2 = Test.class;
    

    意思是“给我代表Test类的Class对象并将它存储在变量test2中。

    除了Class 是泛型之外,这与泛型关系不大。这是关于类对象的。

    【讨论】:

      【解决方案3】:

      Class&lt;Test&gt; 是泛型类型的特定类型。从字面上看,您正在定义一个变量test2,它的类型为Class&lt;T&gt;T == Test

      Class&lt;T&gt; 是一个参数类型,它依赖于 T,如果你添加约束 T == Test 那么你说的是Class&lt;Test&gt; 的变量(这是一个特定的不同类型)。

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

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

      然后你写

      Derived derived = ...
      

      您可以毫无问题地声明您正在声明一个名为derived、类型为Derived 的变量。这是同一件事,但Class&lt;Test&gt; 不是Class&lt;T&gt; 的子类型,而是它的一个特化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 2020-07-31
        • 2011-07-04
        • 2016-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多