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。