java当我重写树形图中的“put(K键,V值)”时,如何更改“value”?
我扩展了一个树映射,覆盖了“put()”,并做了一些相当于:
public class MyMap<K, Integer> extends TreeMap<K, Integer> {
@Override
public Integer put(K key, Integer value) throws ClassCastException, NullPointerException {
java.lang.Integer newValue = java.lang.Integer.valueOf(123);
super.put(key, newValue); // <--- error message here
return newValue;
}
}
错误消息:
找不到适合put(K,java.lang.Integer)的方法。。。JAVAlang.整数不能转换为整数
我知道这和泛型有关。修改被重写的“put()”中的“value”似乎是一件合理的事情,但我无法理解这一点
# 1 楼答案
您的
Integer
类型参数阴影java.lang.Integer
解决方案可能是删除类键的type参数(因为您似乎已经决定将
java.lang.Integer
作为值类型)非常相似的问题:Unboxing issues
# 2 楼答案
问题是,在声明MyMap时,您告诉Java编译器您有两种泛型类型:“K”和“Integer”。因此,“Integer”不是java。lang.Integer数值类,但它是一个泛型类型,可以是任何类。就像java一样。lang.Integer不一定是您的泛型“Integer”类型,那么Java编译器会发出错误
这个例子可以做到:
这只是另一个编译但没有意义使用的示例(只是为了让您更好地了解发生了什么):