Как узнать, является ли объект Java списком

1

Я хотел бы знать, как спросить, является ли объект java List или ArrayList.

Например:

if (Object instanceof List <?>)) {
    // Do something
}

PS: У меня есть несколько списков разных типов и я хотел бы реализовать метод для любого списка независимо от того, какой тип данных он содержит.

  • 5
    Просто избавься от <> .
  • 0
    ArrayList - это List . Вы спрашиваете, является ли это другой реализацией List ?
Показать ещё 1 комментарий
Теги:
list
instanceof

2 ответа

3
Лучший ответ

Чтобы проверить, является ли экземпляр List или ArrayList 1 просто используйте instanceof.

Обратите внимание, что в соответствии с JLS 15.20.2 операнд типа оператора instanceof должен быть повторно идентифицируемым типом и определен в JLS 4.7 как:

  • параметризованный тип, в котором все аргументы типа являются неограниченными подстановочными знаками,
  • необработанный тип
  • примитивный тип (не применимый в этом контексте
  • тип массива, тип элемента которого можно повторно идентифицировать, или
  • вложенный тип, где каждый охватывающий тип также можно повторно использовать.

Поэтому оба они должны быть действительны:

if (obj instanceof List)) {     // raw type
    // Do something
}
if (obj instanceof List <?>)) { // type parameter is an unbounded wildcard
    // Do something
}

но это будет ошибка компиляции:

if (obj instanceof List <Integer>)) {
    // Do something
}

У меня есть несколько списков разных типов и я хотел бы реализовать метод для любого списка независимо от того, какой тип данных они содержат.

Это не проблема.

(Но было бы проблемой, если бы вы хотели, чтобы этот метод работал только для списков с определенными типами данных... на основе простой версии typecheck. Параметры типа для универсального типа недоступны во время выполнения тестов во время выполнения, поэтому вы нужно будет проверять каждый элемент списка индивидуально...)


1 - Обратите внимание, что любой ArrayList также является List... потому что класс ArrayList реализует интерфейс List.

0

"Список" - это только интерфейс. Реализация - экв. "ArrayList" или "LinkedList".

Но вот еще одна тема из Stackoverflow:

как к InstanceOf-listmytype

Ещё вопросы

Сообщество Overcoder
Наверх
Меню