2016-04-22 33 views
0

我知道有很多類似的問題,但我真的沒有找到有效的答案來解決我的問題。獲取「?」類的類型在ArrayList <?擴展類>

我有一個抽象類Entity。 然後我有這兩個類,BikerPedestrian,都延伸Entity

我需要在這兩個類兩個ArrayList, 進行操作的話,我有一個方法

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

這個方法應該同時更新ArrayList

鑑於ArrayList<Biker>ArrayList<Pedestrian>可能都是空的,有沒有辦法獲得該方法正在使用哪兩個類?我知道我可以通過一些其他參數的方法,我只是想知道,如果我可以做像entities.getObjectClass()這最終會返回BikerPedestrian

預先感謝您!

編輯: 按照要求,用例:

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

另外,還有[獲取泛型類型的java.util.List](http://stackoverflow.com/questions/1942644/get-generic-type- of-java-util-list) – 4castle

+0

@ 4castle謝謝你,鏈接幫了我。 – Matteo

回答

2

這是根本不可能,如果列表是空的。

閱讀關於刪除的細節。保持該ArrayList時

class <T> myClass 

在可以定義一個類classType所引用,那麼您可以與}這種,.getClass使用構造()等等:

0

對於泛型如定義的類。

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

更簡單的方法可以有BaseClass的限定一類getClassRef()返回要麼Biker.class或Pedestrian.class作爲結果。

+0

好方法,雖然我正在尋找更簡單的東西,因爲它是一個非常「軟」的情況。謝謝你的方式 – Matteo

+0

這不起作用,除非你有一個具體的子類。 –