簡體   English   中英

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

[英]How to use put() in a subclass of Java's TreeMap

我想創建一個java.util.TreeMap類的子類,以允許我添加一個increment方法:

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)

我做錯了什么?


請參閱此處了解我采用的解決方案。

如果要創建自定義樹形圖以獨占處理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
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM