获取java.util.Arrays $ ArrayList的类

时间:2015-10-23 08:18:52

标签: java android arrays java-ee arraylist

我如何知道java.util.Arrays$ArrayList的实例。我已尝试过此代码段,但它根本不起作用:

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

我已经将对象classtype与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 作为我的控件。

提前致谢,

奥马。

3 个答案:

答案 0 :(得分:2)

如果列表来自Arrays#asList,则返回的ArrayList不是java.util.ArrayList,因此与此类的比较将始终失败。

问题是,为什么你需要知道它正是这个实现?也许这足以检查java.util.List

总的来说,为什么你需要instanceof运算符是值得怀疑的,通常还有更好的其他设计解决方案。

答案 1 :(得分:1)

java.util.Arrays$ArrayList是由Arrays方法返回的Arrays.asList私有内部类。

由于它是私有类,因此无法以可与instanceof运算符一起使用的方式访问该类。但是,您可以使用反射进行检查:

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

但我不建议这样做。这是一个很好的做法to program against an interface。在这种情况下,List接口定义了对象的行为。 对象的实际类别无关紧要。

答案 2 :(得分:0)

您为什么使用Arrays?您必须使用此代码中的ArrayList

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