2016-04-22 3 views
0

似たような疑問がたくさんあることは知っていますが、私の質問に対する正当な答えは実際には見つかりませんでした。「?」のクラスタイプを取得します。 ArrayList <? extendsクラス>

私は抽象クラスEntityを持っています。 私はこれら2つのクラス、BikerPedestrianを持っています。両方ともEntityです。

は、私はこの方法では、両方のArrayListを更新する必要があり、私はこの方法

private void handleEntities(ArrayList<? extends Entity> entities) {...}; 

を持って、そうするために両方のクラスの2 ArrayList、 に対して操作を実行する必要があります。

ArrayList<Biker>ArrayList<Pedestrian>の両方が空の場合、メソッドがどの2つのクラスのどちらを使用しているかを取得する方法はありますか?私は方法に他のパラメータを渡すことができることを知っている、私はちょうどBikerまたはPedestrianを返すentities.getObjectClass()のような何かをすることができるかどうかを知りたい。

ありがとうございます!

編集:要求、ユースケースとして

private void handleEntities(ArrayList<? extends Entity> entities) { 
    // an hypothetical switch case 
    if (entities.getObjectClass().toString() == Biker.class.getSimpleName()) 
     // add element to Biker ArrayList 
    else if (entities.getObjectClass().toString() == Pedestrian.class.getSimpleName()) 
     // add element to Pedestrian ArrayList 
} 
+0

これが必要な理由の完全なケースを表示してください –

+0

また、[Generate type of java.util.List]を取得しています(http://stackoverflow.com/questions/1942644/get-generic-type- of-java-util-list) – 4castle

+0

@ 4castleありがとう、リンクが私を助けました。 – Matteo

答えて

2

リストが空の場合、これは、文字通り不可能です。

詳細については、消去時に読み上げてください。などのジェネリックで定義されたクラスについて

0

:あなたはその後INSTANCEOF、.getClassで使用できるクラスするClassType基準を定義することができるコンストラクタ内

class <T> myClass 

()などのArrayListを保持します。

try { 
    classType = (Class<T>) 
       ((ParameterizedType) getClass().getGenericSuperclass()) 
         .getActualTypeArguments()[0]; 
} catch (ClassCastException cce) { 
     classType = (Class<T>) getClass().getGenericSuperclass(); 
} 

単純なアプローチは、結果としてBiker.class又はPedestrian.classのいずれかを返す)BaseClassのは、クラスgetClassRef(定義有するようにしてもよいです。

+0

非常に "ソフトな"ケース。 – Matteo

+0

具体的なサブクラスを持っていない限り、これは機能しません。 –

関連する問題