如何在Java的TreeMap的子类中使用put()

时间:2015-01-08 15:55:40

标签: java subclass

我想创建一个java.util.TreeMap类的子类,以允许我添加一个增量方法:

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

2 个答案:

答案 0 :(得分:2)

如果您想创建自定义树形图以独家处理Integers,则应将其扩展为TreeMap<K, Integer>,而不是通用类型V

public class CustomTreeMap<K> extends TreeMap<K, Integer> {
  ...
}

这样您以后就不需要instanceof检查。

如果您的密钥也需要是Integer,则不要声明通用类型:

public class CustomTreeMap extends TreeMap<Integer, Integer> {
  ...
}

答案 1 :(得分:1)

如果它应该是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
  }
}