2016-11-14 3 views
0

Set<? extends Politician>を引数とする別の関数に渡される既存のSet<Trump>があります。 Set<? extends Politician>には、PoliticianオブジェクトまたはTrumpオブジェクトのみが含まれます。<? Animal>

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? 
    } 

} 
+0

'instanceof'またはリフレクションを使用せずに? – bradimus

+1

'instanceof'を使用すると、コードの匂いの証拠になる可能性がありますが、スーパータイプのコードにアクセスできない場合は、既知のサブタイプのインスタンスを操作するための最良の、最も速く、最も安いオプションですタイプ。 – scottb

+0

@bradimus ..はい..リフレクションまたはinstanceofなしでそれを行うには...関数の派生クラスまたは引数を再設計するのは大丈夫です。 – user46743

答えて

2

は、手動でオブジェクトをフィルタする必要があります:

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

tはトランプ(のサブクラス)のインスタンスである場合instanceofオペレータはtrueを返します。コードの下

1

はうまくいく -

public Set<Trump> getSetOfTrump(Set<? extends Politician> politicians){ 
    return politicians.stream().filter(s -> s instanceof Trump).map(s ->(Trump)s).collect(Collectors.toSet()); 
} 
関連する問題