Получение подтипа из <? расширяет животных>
Существует существующий 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());
}