Вы не можете проверить более чем o instanceof List<?>
.
Тип безопасности, который вы получаете от Java-дженериков, происходит только во время компиляции. Метод, подобный вашему (который принимает объект, а затем пытается выяснить, что делать), не очень хорошо работает с этим дизайном. я могу понять, почему такой динамический метод необходимо некоторое время, но учтите, дополнив его с версиями для типизированных параметров:
public void example(Object o) {
if(o instanceof List<?>)
example((List)o); // can only hope that the type is correct here
}
public void example(List<MyType> list){
// do something
}
В тех случаях, когда те могут быть использованы, вы получите полную выгоду от дженериков. В других случаях вы должны зависеть от людей, читающих ваш Javadoc, и только передачи правильных типов.
То, что даже вышеприведенный подход не может сделать, состоит из двух разных кодов для List<TypeA>
и List<TypeB>
. Если это действительно необходимо для вас, подумайте о том, чтобы использовать ваши собственные типы оберток ListOfTypeA
, ListOfTypeB
.
В зависимости от того, что вам нужно сделать, это не может быть даже необходимо смотреть на стертой типа списка в целом, и просто работать на типах времени выполнения отдельных элементов:
for (Object o: list){
if (o instanceof TypeA){
}
if (o instanceof TypeB){
}
}
Этот вопрос звучит знакомо, как тот, который был задан в течение последних 90 дней или около того. Попробуйте посмотреть [http://stackoverflow.com/questions/1004022/java-generic-class-determine-type]. –