2013-01-24 59 views
0

想再去讀做類似如下:獲取泛型集合類,而無需使用一個實例

public class Test { 
    public static void main(String[] args) { 
     Map<String, Set<String>> map = new HashMap<String, Set<String>>(); 
     map.put("key1", new HashSet<String>()); 

     Set<String> theSet = getObjectAs(map, ***Set<String>.class***); 
    } 

    private static <T> T getObjectAs(Object object, Class<T> cls){ 
     return cls.cast(object); 
    } 
} 

但是,這並不工作,我可以用拿不到類對象該組中的.class(參見粗體),因爲它是參數化的。

我想使該方法返回一組誰的類型可能會有所不同(它不會永遠是一組字符串),但我知道,我可以給作爲參數。

有沒有做這樣的事情的另一種方式?

+0

準確的用例是什麼?您正在創建已經鍵入的「地圖」。你甚至不需要「getObjectAs」方法。您只需要:設置< String > theSet = map.get(「key1」); – mightyrick

+0

將映射投射到集合也不起作用 - getObjectAs(map,Set .class); – jdb

回答

1

你都不可能做到這一點的唯一方法是接受你需要做不安全的轉換。 Set<String>.class沒有這樣的事情,因爲它在每個方面都與Set.class完全相同。

你可能能夠做的唯一的其他事情就是使用某個庫中某個類的「通用類」類型,比如Guava's TypeToken,但這不會讓你避開不安全的轉換 - 它會只允許你用泛型來指定它。番石榴的TypeToInstanceMap的作用類似。

相關問題