Получение подтипа из <? расширяет животных>

Существует существующий Set<Trump> который передается другой функции, которая принимает Set<? extends Politician> в качестве аргумента. При условии Set<? extends Politician> будет содержать либо Politician Объект или Trump Только объект.

Politican Класс не может быть изменен. Trump Класс доступен для модификации.

Есть ли способ, чтобы чисто сделать следующее, или как должен производный класс (Trump) быть перепроектирован, чтобы быть в состоянии сделать это?

public Set<Trump> getSetOfTrump(Set<? extends Politician> politicianSet)
{
    //do some processing
    for(Politician pol : politicianSet){ //compiler is ok.. but I dont need Politician Object here
    }

    for(Trump t : politicianSet){ // any way to get Trump Objects out of politicianSet?
    }

} 

2 ответа

Решение

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

for(Politician t : politicianSet){ // any way to get Trump Objects out of politicianSet?
  if(t instanceof Trump) {
    //do your magic here
  }
}

instanceof оператор возвращает true, если t является экземпляром (подклассом) Трампа.

Ниже код будет работать -

public  Set<Trump> getSetOfTrump(Set<? extends Politician> politicians){
    return  politicians.stream().filter( s  -> s instanceof Trump).map(s ->(Trump)s).collect(Collectors.toSet());
}
Другие вопросы по тегам