[英]How to use generics in parameter properly
該T
可以是擴展Object
的任何類型,並且您的代碼不是類型安全的。 如果傳入了HashMap<String, String>
任何內容HashMap<String, String>
則可能會收到ClassCastException
。 但是使用operator的instance of
將防止這種情況的發生。 但是仍然任何人都可以將任何對象發送到您的方法。 因此,未經檢查的警告僅說明了這一點。
在這里使用實例的實例對我來說有點尷尬。 相反,如果您想向現有地圖添加條目,則可以像這樣更改通用方法的聲明,
public <S, T extends Map<S, S>> void addEntryToMap(T x, S key, S value) {
x.put(key, value);
}
與上面的check方法實例相比,此代碼是類型安全的,更干凈更優雅的代碼。
我不確定您要用什么方法實現
public <T> void run(T x){ // Gets an unbounded T which means it can accept anything under Object.
if(x instanceof HashMap){
((HashMap<String,String>)x).put("foo","bar"); // How are you so sure it is an HashMap<String,String>? It can be any HashMap,or even Object!! That is exactly why your compiler is telling it is doing an unchecked cast.
}
}
這回答了您的第一點。
第二點,我們需要對此進行更清晰的解釋。
第三點,Java中有一種稱為類型擦除的類型,其中通用方法將無法在運行時知道對象的類型。 您可以傳遞類進行轉換,也可以使用有界通配符進行編譯時檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.