У меня есть коллекция нескольких классов, мне нужен один итератор, и этот объект приведен - PullRequest
0 голосов
/ 26 марта 2019

У меня есть ArrayList, и у меня есть коллекция объектов разных объектов

Затем у меня есть итератор


for(Iterator i = results.iterator(); i.hasNext();) {

Object row = i.next();

Проблема в том, что у меня есть несколько классов, использующих это.Например, User.class.Как мне удостовериться, что этот объект приведен

User u = (User) row?

1 Ответ

0 голосов
/ 26 марта 2019

используйте instanceof!

 for(Iterator i = results.iterator(); i.hasNext();) {

    Object row = i.next();

    if (row instanceof User) {
       User u = (User) row; // this is safe
       // ...
    }

 }

с несколькими типами

 for(Iterator i = results.iterator(); i.hasNext();) {

    Object row = i.next();

    if (row instanceof User) {
       User u = (User) row; // this is safe
       // ...
    } else if (row instanceof Stuff) {
       Stuff u = (Stuff) row; // this is safe
       // ...
    }

 }

с несколькими типами в общем списке

 Collection<? extends Human> results = ... ;
 for(Human h : results) {

    if (h instanceof User) {
       User u = (User) h; // this is safe
       // ...
    } else if (h instanceof Man) {
       Man m = (Man) h; // this is safe
       // ...
    } else if (row instanceof Woman) {
       Woman w = (Woman) h; // this is safe
       // ...
    }

 }

foreach вариант

for (Object row : results) {
    if (row instanceof User) {
       User u = (User) row; // this is safe
       // ...
    }
}

Ява 8 вариант

results.stream().filter(row -> row instanceof User).map(row -> (User) row).forEach(user -> {...});

НТН!

...