【问题标题】:What does int.class meanint.class 是什么意思
【发布时间】:2013-08-16 11:12:16
【问题描述】:

在java中,int、float等都是原始类型。如果我们需要将它与泛型一起使用,则使用包装器类。 但是下面的声明在java中仍然有效,

 Class<Integer> intClass=int.class

我们如何调用int.class,即使它是一个原始类型?

【问题讨论】:

标签: java reference primitive


【解决方案1】:

原语变成对象

对于原语,在相应的包装类中有可用作名为 TYPE 的常量的 Class 对象——即 int.class 更改为 java.lang.Integer.TYPE 。对于其他类型,编译器在正在编译的类中创建一个私有成员变量来保存 Class 对象,并生成代码以使用 Class.forName() 初始化该成员。

找到了一些discussion

还有一个不错的discussion here,您的示例也包含在此链接中。

从那里说几句话:

一个类怎么可能是一个原始的?让我们再混淆一下。我们可以通过编码访问表示定义类的 Class 对象,比如:

Equation.class // returns the Equation Class object

但是,我们也可以说:

int.class

获得一个名为“int”的类对象。请注意,我们没有将 getClass() 方法发送给对象;我们使用了内置原始类型 (int) 的保留字,并使用点表示法访问了它的类“字段”。这会返回一个 Class 对象!

【讨论】:

    【解决方案2】:

    根据规范,int.classClass&lt;Integer&gt; 的类型相同。

    来自Docs

    基本的 Java 类型(布尔、字节、字符、短、整数、长、 float 和 double),关键字 void 也表示为 Class 对象。

    来自JLS 15.8.2

    15.8.2。类文字

    类字面量是由类名组成的表达式, 接口、数组或原始类型,或伪类型 void,后跟 由“。”和令牌类。

    C.class 的类型,其中 C 是类、接口或 数组类型,为Class&lt;C&gt;

    p.class的类型,其中p是原始类型的名称, 是Class&lt;B&gt;,其中 B 是 p 类型表达式的类型 拳击转换。

    void.class 的类型是Class&lt;Void&gt;

    如果命名类型是类型变量,则编译时错误 或参数化类型或元素类型为 a 的数组 类型变量或参数化类型。

    如果命名类型不表示类型,则会出现编译时错误 可访问且在范围内 类文字出现。

    类字面量计算为指定类型的 Class 对象(或 for void) 由类的定义类加载器定义 当前实例的。

    【讨论】:

    • 说“ Class&lt;Integer&gt;”是错误和误导的。 int.classtypeClass&lt;Integer&gt;,但它与Class&lt;Integer&gt;实例Integer.class是完全不同的对象,它代表原始ints的类型而不是@ 987654334@ 个对象。
    【解决方案3】:

    类字面量是一个表达式,由类、接口、数组或原始类型或伪类型 void 的名称组成,后跟一个 `.'和令牌类。

    1. 枚举是一种类,注解是一种接口。
    2. 每个数组也属于一个类,该类被反映为一个由 3. 共享的 Class 对象。具有相同元素类型和维数的所有数组。
    3. 原始 Java 类型(boolean、byte、char、short、int、long、float 和 double)和
    4. 关键字void也是

    表示为 Class 对象。

    所以System.out.println(int.class); 将打印intSystem.out.println(Integer.class); 将打印class java.lang.Integer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      • 1970-01-01
      • 2013-03-09
      • 2020-05-01
      相关资源
      最近更新 更多