int.class是什么意思

时间:2013-08-16 11:12:16

标签: java reference primitive

在java int,float等中,是原始类型。我们需要使用包装类来使用泛型。 但是仍然以下声明在java中起作用,

 Class<Integer> intClass=int.class

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

3 个答案:

答案 0 :(得分:6)

原语成为对象

  

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

找到了一些discussion

一个不错的discussion here和你的例子也包含在这个链接中。

从那里说几句话:

  

一个Class怎么能成为一个原始的?让我们把事情搞得一团糟。我们可以通过编码访问表示已定义类的Class对象,比如:

Equation.class // returns the Equation Class object

但是,我们也可以说:

int.class
  

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

答案 1 :(得分:4)

int.classClass<Integer>的类型相同,符合规范。

来自Docs

  

原始Java类型(boolean,byte,char,short,int,long,   float和double),关键字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>

     

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

     

如果命名类型不表示类型,则为编译时错误   这是可访问的,并且在范围内   class literal出现。

     

类文字计算命名类型的Class对象(或   for void)由类的定义类加载器定义   当前实例。

答案 2 :(得分:2)

类文字是一个表达式,由类,接口,数组或基本类型的名称或伪类型void组成,后跟一个“。”和令牌类。

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

    因此System.out.println(int.class);将打印int,而System.out.println(Integer.class);将打印class java.lang.Integer