2015-10-23 2 views
0

Как узнать экземпляр 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 бы быть отличным решением.

Мой вопрос: что такое classType of java.util.Arrays$ArrayList, поэтому я могу использовать instanceof для моего контроля.

Заранее благодарен,

Omar.

+0

'instanceof java.util.ArrayList' – SacJn

+0

Зачем вам вообще нужно знать, что класс является экземпляром' java.util.Arrays $ ArrayList'? Ваш код не должен зависеть от этого. – Jesper

ответ

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 определяет поведение объекта. Фактический класс объекта не должен иметь значения.

+0

Спасибо за вашу помощь. Я не знал, что в случае ** ClassA $ ClassB ** ClassB является частным внутренним классом ClassA. –

0

Почему вы используете Arrays? Вы должны использовать ArrayList как в этом коде

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

в случае, если список исходит от Arrays#asList, возвращаемый ArrayList НЕ java.util.ArrayList, поэтому сравнение этого класса всегда будет терпеть неудачу.

Вопрос в том, почему вы должны знать, что это именно такая реализация? Может быть, достаточно проверить на java.util.List?

В целом сомнительно, почему вам нужен оператор instanceof вообще, часто есть другие дизайнерские решения.

+0

Это из-за природы проекта, над которым я работаю. Я получаю список Arrays.asList(), и я не мог его изменить, так как я не работаю над этой частью проекта. Наконец, решение заключалось в том, чтобы спросить человека, который работает над созданием списка, чтобы отправить мне java.util.ArrayList, и это сработало! Все равно, спасибо за помощь! –

+0

вы также можете просто обернуть извлеченный список в новый список, а затем вы можете работать с этим еще –

Смежные вопросы