Я хотел бы знать, как спросить, является ли объект java List или ArrayList.
Например:
if (Object instanceof List <?>)) {
// Do something
}
PS: У меня есть несколько списков разных типов и я хотел бы реализовать метод для любого списка независимо от того, какой тип данных он содержит.
Чтобы проверить, является ли экземпляр 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
.
"Список" - это только интерфейс. Реализация - экв. "ArrayList" или "LinkedList".
Но вот еще одна тема из Stackoverflow:
<>
.ArrayList
- этоList
. Вы спрашиваете, является ли это другой реализациейList
?