int.class是什么意思

2022-09-04 03:33:39

在java int中,float等是基元类型。使用包装类是为了以防我们需要将其与泛型一起使用。但是下面的声明仍然适用于java,

 Class<Integer> intClass=int.class

即使它是一个原始类型,我们怎么能调用呢?int.class


答案 1

成为对象的基元

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

发现一些讨论

这里有一个很好的讨论,你的例子也在这个链接中介绍过。

从那里说几句话:

类怎么可能是原始的?让我们把事情再混一谈。我们可以通过编码来访问表示已定义类的 Class 对象,例如:

Equation.class // returns the Equation Class object

但是,我们也可以说:

int.class

获取名称为“int”的类对象。注意,我们还没有将getClass()方法发送到一个对象;我们使用内置基元类型(int)的保留字,并使用点表示法访问其类“field”。这将返回一个 Class 对象!


答案 2

int.class与规格相同。Class<Integer>

来自文档

原始 Java 类型(布尔值、字节、字符、短整型、整型、长整型、浮点型和双精度型)和关键字 void 也表示为 Class 对象。

来自 JLS 15.8.2

15.8.2. 类文字

类文本是一个表达式,由类、接口、数组或基元类型的名称或伪类型 void 组成,后跟 “.” 和标记类。

C.class的类型(其中 C 是类、接口或数组类型的名称)是 。Class<C>

p.class 的类型(其中 p 是基元类型的名称)为 Class<B>,其中 B 是装箱转换后 p 类型的表达式的类型。

void.class的类型是 。Class<Void>

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

如果命名类型不表示在类文本出现时可访问且在作用域中的类型,则会出现编译时错误。

类文本的计算结果为命名类型(或 void)的 Class 对象,该对象由当前实例的类的定义类装入器定义。