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