我如何知道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 作为我的控件。
提前致谢,
奥马。
答案 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.
}