簡體   English   中英

我們如何在原始類型上使用 .class?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM