簡體   English   中英

在Java中確定對象的類型

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

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