Reflection API中的原始类型

时间:2014-12-03 07:46:19

标签: java reflection

每当我尝试使用boolean Class.forName()语法和getClass()等原始类型时,都会生成编译时错误,但是当我使用.class语法时,它就有效输出为boolean

我的问题是为什么它与.class语法一起使用?我认为在String中应该总是有一个对象来代替String.class

public class reflect2 
{
     public static void main(String[] args) 
     {      
          Class c1 = boolean.class;     
          System.out.println(c1.getName());     
    }
}

2 个答案:

答案 0 :(得分:3)

Oracle Java tutorials

中提到了这一点
  

.class语法

     

如果类型可用但没有实例,则可以   通过将“.class”附加到类型的名称来获取类。 :此   也是获取原始类型Class的最简单方法。

     

布尔b;
  类c = b.getClass(); //编译时错误
  类c = boolean.class; //正确

     

请注意,语句boolean.getClass()会产生编译时错误,因为布尔值是基本类型,无法解除引用。 .class语法返回与boolean 类型对应的Class。

您需要能够以某种方式表示基元的类型,因为例如,当您使用反射来搜索具有基本参数类型的方法或构造函数时,它是必需的。

答案 1 :(得分:2)

getClass()java.lang.Object中定义的方法,只能在实例上调用方法。

.class类文字的一部分,它不是方法调用,也允许在基元类型上使用。

引用The Java™ Language Specification Section 15.8.2. Class Literals

  

类文字是一个表达式,由类,接口,数组或基本类型的名称或伪类型void组成,然后是'.'和令牌class

最后来自Class.forName()的javadoc:

  

使用给定的字符串名称返回与接口关联的Class对象。

因此Class.forName()仅适用于类和接口,而不适用于原始类型