每当我尝试使用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());
}
}
答案 0 :(得分:3)
.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()
仅适用于类和接口,而不适用于原始类型。