[英]How can we use .class on primitive types?
當我們說
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 操作背后的動機是什么?
此外,如果您看到類Class
toString(
) 方法
public String toString() {
return (isInterface() ? "interface " : (isPrimitive() ? "" : "class "))
+ getName();
}
由於原始類型不是類或接口,它只是打印名稱( int
表示int
)。 那么為什么允許創建一個不存在的類的Class
對象呢?
它記錄在javadoc 中:
原始 Java 類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也表示為 Class 對象。
當您想通過反射調用需要原始參數的方法時,它特別有用。
想象一個方法:
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 中的一些保留類型。
當您說 Integer 時,它是 java.lang 包中的一個類,例如:
類整數{ ........ }
因此對於任何類,您都可以使用 .class,不適用於原語。 BTW,你為什么需要這個? 有什么用?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.