我们如何在原始类型上使用.class?

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返回一个类型的对象Classint不是一个类(但是一个原始类型).

当没有这样的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一个不存在的类的对象呢?

ass*_*ias 7

它记录在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)