2014-03-31 40 views
1

我想知道如何問java對象是List還是ArrayList。如何知道java對象是否是列表

例如:

if (Object instanceof List <?>)) { 
    // Do something 
} 

PS:我有幾個不同類型的列表和想實現任何列表的方法,無論它們所包含的數據類型。

+5

剛剛擺脫的'<>'。 –

+0

'ArrayList' _is_ a'List'。你問是否是List的另一個實現? –

+0

你也可以使用.getClass方法並檢查它返回的內容 – ederollora

回答

3

爲了測試是否一個實例是一個ListArrayList ,只需使用instanceof

注意的是,根據JLS 15.20.2,所述instanceof操作的類型的操作數必須是reifiable類型,和在JLS 4.7定義爲:

  • 一個參數化的類型,其中所有類型的參數是無界通配符,
  • 原始類型
  • 基本類型(不適用在此上下文中
  • 數組類型,其元素類型是reifiable,或
  • 一個嵌套類型,其中,每個封閉類型也是可驗證的。

所以這兩個應該是有效的:

if (obj instanceof List)) {  // raw type 
    // Do something 
} 
if (obj instanceof List <?>)) { // type parameter is an unbounded wildcard 
    // Do something 
} 

,但是這將是一個編譯錯誤:

if (obj instanceof List <Integer>)) { 
    // Do something 
} 

I have several lists of different types and would like to implement the method for any list no matter what type of data they contain.

這是沒有問題的。

(但是,如果您希望該方法僅適用於包含特定類型數據的列表,那麼這將是一個問題......它基於簡單的運行時類型檢查。泛型類型的類型參數在運行時不可用於運行時測試,所以你需要單獨測試列表中的每個元素...)


1 - 請注意,任何ArrayList一個List ......因爲ArrayList類實現List接口。

相關問題