HOWTO · Java

如何在 Java 中檢查物件的執行期類別

使用 getClass()、getSimpleName() 與 getTypeName() 檢視 Java 物件的執行期類別,並了解它與變數宣告型別的差異。

本頁內容

使用 getClass() 檢視非 null 物件的執行期類別。這不會顯示變數的宣告型別。呼叫 getSimpleName() 可取得不含套件名稱的類別名稱;呼叫 getTypeName() 則可取得 java.lang.String 這類型別名稱。

在 Java 中使用 getClass().getSimpleName() 檢查物件的執行期類別

對物件呼叫 getClass() 會取得代表其執行期類別的 Class<?> 物件,接著呼叫 getSimpleName(),即可取得不含套件資訊的類別名稱。即使變數宣告為 Object,結果仍反映物件的執行期類別。

執行以下範例:

public class RuntimeSimpleNames {
  public static void main(String[] args) {
    Object value = "Hello, Java!";
    String[] names = {"Ada", "Lin"};
    int count = 3;
    Object boxedCount = count;

    System.out.println(value.getClass().getSimpleName());
    System.out.println(names.getClass().getSimpleName());
    System.out.println(boxedCount.getClass().getSimpleName());
  }
}
String
String[]
Integer

陣列也是物件,因此也能對陣列呼叫 getClass();String[] 值的簡短名稱是 String[]。int 這類基本型別沒有 getClass() 方法。將它指派給 Object 時,Java 會將它裝箱為 Integer,因此回報的類別是 Integer,而不是 int。

在 Java 中使用 getClass().getTypeName() 檢查物件的執行期類別

getTypeName() 會以 String 回傳型別名稱。對 String 物件而言,回傳值包含套件名稱,與 getSimpleName() 不同。

執行以下範例:

public class RuntimeTypeName {
  public static void main(String[] args) {
    Object value = "Hello, Java!";
    String typeName = value.getClass().getTypeName();
    System.out.println(typeName);
  }
}
java.lang.String

這兩個方法都以非 null 物件為對象,並回報其執行期類別。只需要簡短類別名稱時,選用 getSimpleName();需要包含套件名稱的型別名稱時,選用 getTypeName()。這兩個方法都無法判斷變數的宣告型別。

結論

若要取得簡短的類別名稱,請使用 getClass().getSimpleName();若要取得包含套件資訊的型別名稱,請使用 getClass().getTypeName()。這些方法適用於物件,包括陣列。檢視基本型別的值之前,請先將值裝箱;請留意結果會是包裝類別,例如 int 對應的 Integer。