[英]Determining the type of an object in java
假設我有以下Java代碼:
Object myObj = new ArrayList();
List myList = new ArrayList();
我想知道如何確定輸入給定對象的類或接口。
請注意,我不是在說實例化對象的類型(在此為ArrayList),而是在表達式左側的類型,因此在上面的示例中,myObj的對象為myObj, List的實例為myList。
我如何稱呼這種“左側”類型?
另外,如何稱呼“右側”類型?
如何以編程方式確定此“左側”類型是什么?
問候,
左側使用的類型不是object的類型。 這是變量的類型。 (靜態或編譯時類型。)
值得區分變量和對象-變量具有名稱,類型和存儲位置。 存儲位置包含與變量類型兼容的值。
我們發現在執行時變量的類型,你需要某種形式的參考變量本身作為一個變量。 例如,如果它是一個字段(靜態或實例),則可以獲取適當的Field
引用,可以使用Field.getType()
詢問類型。
如果它是局部變量,您會發現它有點困難。 如果您可以解釋您要實現的目標 (而不是您認為會幫助您實現的機制),我們可能會提供更多幫助。
調用myList.getClass()
或類似的操作將無法執行您想要的操作,因為這將處理myList
的值 ,而不是變量本身。
“左側”類型稱為靜態類型 。
“右側”類型稱為動態類型 。
您可以通過調用var.getClass()
確定動態類型。
確定靜態類型的一種方法是使用函數重載:
public static void f(Object var) { ... }
public static void f(List var) { ... }
當調用f(var)
,編譯器將使用var
的靜態類型來調用正確的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.