如何在 Java 的 TreeMap 的子类中使用 put()
How to use put() in a subclass of Java's TreeMap
我想创建 java.util.TreeMap 的 class 的子 class,以允许我添加增量方法:
public class CustomTreeMap<K, V> extends TreeMap<K, V> {
public void increment(Integer key) {
Integer intValue;
if (this.containsKey(key)) {
Object value = this.get(key);
if (!(value instanceof Integer)) {
// Fail gracefully
return;
} else {
intValue = (Integer) value;
intValue++;
}
} else {
intValue = 1;
}
this.put(key, intValue); // put(Integer, Integer) cannot be applied in TreeMap
}
}
Android Studio 1.0.2 首先提出 put(K Key, V Value)
自动补全,后来警告说:
put(K, V) cannot be applied in TreeMap to (java.lang.integer, java.lang.integer)
我做错了什么?
我采用的解决方案见here。
如果您想创建自定义树图来专门处理 Integers
,您应该使其扩展 TreeMap<K, Integer>
,而不是通用类型 V
:
public class CustomTreeMap<K> extends TreeMap<K, Integer> {
...
}
这样您以后就不需要 instanceof
检查了。
如果您的密钥也需要是 Integer
,请改为声明无泛型类型:
public class CustomTreeMap extends TreeMap<Integer, Integer> {
...
}
如果应该是 Integer 则使用 Integer:
public class CustomTreeMap<K> extends TreeMap<K, Integer> {
public void increment(K key) {
Integer intValue;
if (this.containsKey(key)) {
Object value = this.get(key);
if (!(value instanceof Integer)) {
// Fail gracefully
return;
} else {
intValue = (Integer) value;
intValue++;
}
} else {
intValue = 1;
}
this.put(key, intValue); // put(Integer, Integer) cannot be applied in TreeMap
}
}
我想创建 java.util.TreeMap 的 class 的子 class,以允许我添加增量方法:
public class CustomTreeMap<K, V> extends TreeMap<K, V> {
public void increment(Integer key) {
Integer intValue;
if (this.containsKey(key)) {
Object value = this.get(key);
if (!(value instanceof Integer)) {
// Fail gracefully
return;
} else {
intValue = (Integer) value;
intValue++;
}
} else {
intValue = 1;
}
this.put(key, intValue); // put(Integer, Integer) cannot be applied in TreeMap
}
}
Android Studio 1.0.2 首先提出 put(K Key, V Value)
自动补全,后来警告说:
put(K, V) cannot be applied in TreeMap to (java.lang.integer, java.lang.integer)
我做错了什么?
我采用的解决方案见here。
如果您想创建自定义树图来专门处理 Integers
,您应该使其扩展 TreeMap<K, Integer>
,而不是通用类型 V
:
public class CustomTreeMap<K> extends TreeMap<K, Integer> {
...
}
这样您以后就不需要 instanceof
检查了。
如果您的密钥也需要是 Integer
,请改为声明无泛型类型:
public class CustomTreeMap extends TreeMap<Integer, Integer> {
...
}
如果应该是 Integer 则使用 Integer:
public class CustomTreeMap<K> extends TreeMap<K, Integer> {
public void increment(K key) {
Integer intValue;
if (this.containsKey(key)) {
Object value = this.get(key);
if (!(value instanceof Integer)) {
// Fail gracefully
return;
} else {
intValue = (Integer) value;
intValue++;
}
} else {
intValue = 1;
}
this.put(key, intValue); // put(Integer, Integer) cannot be applied in TreeMap
}
}