当我覆盖 TreeMap 中的 "put(K key, V value)" 时,如何更改 "value"?
When I override the "put(K key, V value)" in a TreeMap, how can I change "value"?
我扩展了一个 TreeMap,覆盖了 "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) 的方法...java.lang.Integer 无法转换为整数。
我知道这与泛型有关。在覆盖的 "put()" 中更改 "value" 似乎是一件合理的事情,但我无法弄清楚。
您的 Integer
类型参数隐藏 java.lang.Integer
。
解决方案可能只是删除 class 键的类型参数(因为您似乎决定无论如何都要将 java.lang.Integer
作为值类型)。
class MyMap<K> extends TreeMap<K, Integer> {
...
}
非常相似的问题:Unboxing issues
问题是在声明 MyMap 时,您告诉 Java 编译器您有两个泛型类型:“K ”和“整数”。因此,“Integer”不是java.lang.Integer数值class而是一个泛型类型,可以是任何class。由于 java.lang.Integer 不一定是您的通用“Integer”类型,因此 Java 编译器会发出错误。
这个例子可以解决问题:
public class MyMap<K> 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);
return newValue;
}
}
只是另一个编译但没有意义使用的例子(只是为了让你更好地理解发生了什么):
public class MyMap<K, Integer extends java.lang.Integer> extends TreeMap<K, Integer> {
@Override
public Integer put(K key, Integer value) throws ClassCastException, NullPointerException {
Integer newValue = (Integer) java.lang.Integer.valueOf(123);
super.put(key, newValue);
return newValue;
}
}
我扩展了一个 TreeMap,覆盖了 "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) 的方法...java.lang.Integer 无法转换为整数。
我知道这与泛型有关。在覆盖的 "put()" 中更改 "value" 似乎是一件合理的事情,但我无法弄清楚。
您的 Integer
类型参数隐藏 java.lang.Integer
。
解决方案可能只是删除 class 键的类型参数(因为您似乎决定无论如何都要将 java.lang.Integer
作为值类型)。
class MyMap<K> extends TreeMap<K, Integer> {
...
}
非常相似的问题:Unboxing issues
问题是在声明 MyMap 时,您告诉 Java 编译器您有两个泛型类型:“K ”和“整数”。因此,“Integer”不是java.lang.Integer数值class而是一个泛型类型,可以是任何class。由于 java.lang.Integer 不一定是您的通用“Integer”类型,因此 Java 编译器会发出错误。
这个例子可以解决问题:
public class MyMap<K> 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);
return newValue;
}
}
只是另一个编译但没有意义使用的例子(只是为了让你更好地理解发生了什么):
public class MyMap<K, Integer extends java.lang.Integer> extends TreeMap<K, Integer> {
@Override
public Integer put(K key, Integer value) throws ClassCastException, NullPointerException {
Integer newValue = (Integer) java.lang.Integer.valueOf(123);
super.put(key, newValue);
return newValue;
}
}