我有以下代碼:
abstract public class Base {
private static final HashMap<Integer, ? extends Base> hashMap = new HashMap<>();
public static <T extends Base> void put(Integer key, T val) {
hashMap.put(key, val);
}
public static <T extends Base> T get(Integer key) {
return hashMap.get(key);
}
}
所以,我在Base.put()method:<T extends Base>和 中得到了不兼容的型別<? extends Base>。
有什么區別以及如何正確重寫該代碼?
uj5u.com熱心網友回復:
非常簡單:
? - 是通配符
T - 是泛型型別
它們相似但不同。如果要強制執行型別,則不能使用通配符。你必須使用泛型
例子
public <T extends Number> void copy(List<T> dest,List<T> src){
//code
}
上面的代碼將能夠將串列從 src 復制到 dest。src 和 dest 具有相同的泛型型別,因此復制每個元素是安全的。
public void copy(List<? extends Number> dest, List<? extends Number> src){
//code
}
上面的代碼不是很好。dest 可以是 List< Integer >型別,而 src 可以是 List< Double >型別
我希望這有幫助??
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/363410.html
上一篇:Java雙向引數化類
下一篇:是否可以僅限制記錄的方法?
