当我们说
时Class c = Integer.class;
System.out.println(c);
打印
class java.lang.Integer
这是有道理的,因为java.lang.Integer
是一个类。所以我们可以有一个相应的Class
对象。
但是当我做的时候
Class c1 = int.class;
System.out.println(c1);
它打印int
我感觉有点模棱两可,因为.class
返回类型为Class
的对象而int
不是类(而是基本类型)。
当没有这样的类(primitiveType.class.getName()
)存在时,对原始类型允许.class操作背后的动机是什么?
此外,如果您看到toString(
类<{1}}
Class
由于基本类型不是类或接口,因此只需打印名称(public String toString() {
return (isInterface() ? "interface " : (isPrimitive() ? "" : "class "))
+ getName();
}
的{{1}})。那么为什么要允许创建一个不存在的类的int
个对象呢?
答案 0 :(得分:7)
记录在the javadoc:
中原始Java类型(boolean,byte,char,short,int,long,float和double)以及关键字void也表示为Class对象。
当你想通过反射调用一个需要原始参数的方法时,它特别有用。
想象一个方法:
class MyClass {
void m(int i) {}
}
您可以通过以下方式访问它:
MyClass.class.getDeclaredMethod("m", int.class);
答案 1 :(得分:0)
原语不是一个类。这些是Java中的一些保留类型。
当你说Integer时,它是java.lang包中的一个类,如:
class Integer { ............ }
因此对于任何类都可以使用.class,不适用于基元。顺便说一句,你为什么需要这个?有什么用?
答案 2 :(得分:0)
找到另一个应用程序,例如int.class
。考虑模拟方法
class MyClass {
int myMethod(final int arg) {}
}
要使用 Mockito 进行模拟,您可以使用:
when(myClass.myMethod(any(int.class)).thenReturn(1);
我自己很惊讶这确实有效,而且比简单的更清晰
when(myClass.myMethod(any()).thenReturn(1);