簡體   English   中英

獲取 java.util.Arrays$ArrayList 的類

[英]Get the class of java.util.Arrays$ArrayList

我怎么知道java.util.Arrays$ArrayList的實例。 我試過這個代碼片段,但它根本不起作用:

if (myList instanceof Arrays) {
    //Do something here.
}

我已經將對象類類型與 ArrayList 進行了比較,我遇到了同樣的問題。 但是當我檢查對象時,classType 是一個:

class java.util.Arrays$ArrayList

下面的條件語句是我找到的唯一解決方案:

else if (myList.getClass().toString().equals("class java.util.Arrays$ArrayList")) {
    //do something here
}

但我認為使用 instanceof 控制對象類型將是一個很好的解決方案。

我的問題是: java.util.Arrays$ArrayList的 classType 是什么,所以我可以使用instanceof作為我的控件。

提前致謝,

奧馬爾。

如果列表來自Arrays#asList ,則返回的 ArrayList 不是java.util.ArrayList ,因此與此類的比較將始終失敗。

問題是,為什么你需要知道它正是這個實現? 也許檢查java.util.List就足夠了?

一般來說,你為什么需要 instanceof 運算符是有問題的,通常還有其他更好的設計解決方案。

java.util.Arrays$ArrayListArrays私有內部類,由Arrays.asList方法返回。

由於它是一個私有類,因此無法以可與instanceof運算符一起使用的方式訪問該類。 但是,您可以使用反射進行此檢查:

Class<?> clazz = Class.forName("java.util.Arrays$ArrayList");
// ...
clazz.isAssignableFrom(myList)

但我不建議這樣做。 針對接口進行編程是一個很好的做法。 在這種情況下, List接口定義了對象的行為。 對象的實際類應該無關緊要。

你為什么使用Arrays 您必須像在此代碼中一樣使用ArrayList

if (myList instanceof ArrayList) {
    //Do something here.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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