问题
How can I know the instance of java.util.Arrays$ArrayList
. I've tried this code snippet but it does not work at all :
if (myList instanceof Arrays) {
//Do something here.
}
I have compared the object classtype with ArrayList and I had the same issue. But while I was inspecting the object, the classType was a :
class java.util.Arrays$ArrayList
The conditional statement below was the only solution I found:
else if (myList.getClass().toString().equals("class java.util.Arrays$ArrayList")) {
//do something here
}
but I think that controlling the object type by using instanceof would be a great solution.
My question is : what is the classType of java.util.Arrays$ArrayList
, so I can use instanceof for my control.
Thanks in advance,
Omar.
回答1:
java.util.Arrays$ArrayList
is a private inner class of Arrays
, returned by the Arrays.asList
method.
Since it's a private class there is no way to get access to the class in a way that it can be used with the instanceof
operator. You can do this check using reflection however:
Class<?> clazz = Class.forName("java.util.Arrays$ArrayList");
// ...
clazz.isAssignableFrom(myList)
But I do not recommend doing that. It's a good practice to program against an interface. In this case the List interface defines the behavior of the object. The actual class of the object shouldn't matter.
回答2:
in case the list comes from Arrays#asList
, the returned ArrayList is NOT java.util.ArrayList
, therefore a comparison to this class will always fail.
The question is, why do you need to know that it is exactly this implementation ? Maybe it is enough to check for java.util.List
?
In general it is questionable why you need the instanceof operator at all, often there are other design solutions better.
回答3:
Why are you using Arrays
? You must use ArrayList
like in this code
if (myList instanceof ArrayList) {
//Do something here.
}
来源:https://stackoverflow.com/questions/33297774/get-the-class-of-java-util-arraysarraylist