2013-05-31 5 views
1

В настоящее время у меня есть два спискаПолучить типы список объектов во время выполнения

private List<Department> subdepts = new LinkedList<Department>(); 
private List<Employee> employees = new LinkedList<Employee>(); 

Во время выполнения я получаю те как объекты, но мне нужно знать, когда я вижу List<Department>

Я сходил со следующим код.

// o is an Object 
if(o instanceof List){ 
    List l = (List)o; 
    if(l.size() > 0){ 
    if(l.get(0) instanceof Department){ 

Но что делать, если список пуст? Как узнать, является ли это List<Department>?

+0

'if (! L.isEmpty()) {...}'? – Aquillo

+1

Но реальный вопрос в том, откуда приходит 'o' и почему вы не знаете, является ли это« списком »или нет? – Aquillo

+0

Я думаю, что нет способа определить, является ли * пустой список * «Департаментом» или «Служащим» – asifsid88

ответ

1

Общие типы параметров стираются во время выполнения, то есть вы не можете определить объявленный общий тип списка. Это называется generic type erasure.

Если вы знаете, что список будет содержать только объекты одного типа, вы можете просто проверить, не является ли какой-либо объект в списке экземпляром вашего конкретного класса, но это непрозрачная работа.

+0

да, вот что я подумал. Если список пуст, нет способа узнать, могут ли он содержать отделы или сотрудников. :( –

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