Ani*_*kur 8 java primitive class
当我们说
Class c = Integer.class;
System.out.println(c);
Run Code Online (Sandbox Code Playgroud)
它打印
class java.lang.Integer
这是有道理的,因为java.lang.Integer是一个阶级.所以我们可以有一个相应的Class对象.
但是,当我这样做
Class c1 = int.class;
System.out.println(c1);
Run Code Online (Sandbox Code Playgroud)
它打印int我觉得有点模棱两可,因为.class返回一个类型的对象Class而int不是一个类(但是一个原始类型).
当没有这样的class(primitiveType.class.getName())时,允许对原始类型进行.class操作的动机是什么?
如果你看到toString()类的方法Class
public String toString() {
return (isInterface() ? "interface " : (isPrimitive() ? "" : "class "))
+ getName();
}
Run Code Online (Sandbox Code Playgroud)
由于原始类型不是类或接口,因此只需打印名称(intfor int).那么为什么要允许创建Class一个不存在的类的对象呢?
它记录在javadoc中:
原始Java类型(boolean,byte,char,short,int,long,float和double)和关键字void也表示为Class对象.
当您想要通过反射调用期望原始参数的方法时,它尤其有用.
想象一个方法:
class MyClass {
void m(int i) {}
}
Run Code Online (Sandbox Code Playgroud)
你可以用以下方式访问它:
MyClass.class.getDeclaredMethod("m", int.class);
Run Code Online (Sandbox Code Playgroud)