2013-03-15 112 views
3

這裏是我的代碼。基本上我試圖從我的intToEnumMap方法返回一個地圖。但是編譯器不允許這樣做。爲什麼編譯器不能推斷我的方法的返回類型?爲什麼編譯器無法推斷我的方法的返回類型?

public enum INVALIDTHRESHOLDSTATE{ 
     ONE(0,GAUGE_MIN_LOWER_THRESHOLD1_MESSAGE), 
     TWO(1,GAUGE_THRESHOLD1_LOWER_THRESHOLD2_MESSAGE), 
     THREE(2,GAUGE_THRESHOLD2_LOWER_MAX_MESSAGE); 

     private static final Map<Integer,INVALIDTHRESHOLDSTATE> intToEnum = new HashMap<Integer, INVALIDTHRESHOLDSTATE>(); 
     static { 

      int i=0; 
      for (INVALIDTHRESHOLDSTATE invalidState : values()){ 
       i++; 
       intToEnum.put(Integer.valueOf(i), invalidState); 
      }  
     } 

     private int value; 
     private String message; 

     private INVALIDTHRESHOLDSTATE(int value,String message){ 
      this.value = value; 
      this.message = message; 
     } 
     public int getValue() { 
      return value; 
      } 
     public String getString() { 
      return message; 
      } 

     // Generic method 
     public static <K,V> Map<K,V> intToEnumMap() { 
      return intToEnum; //doesn't compile 
       ^^^^^^^^^ 
     } 


    } 

回答

8

你已經創建了一個通用方法,所以任何人都可以撥打電話:

Map<String, Long> map = INVALIDTHRESHOLDSTATE.<String, Long> intToEnumMap(); 

我認爲不是你打算 - 如果你返回intToEnum它看起來像你對我不要不希望呼叫者指定泛型類型參數,它應該是:

public static Map<Integer, INVALIDTHRESHOLDSTATE> intToEnumMap() { 
    return intToEnum; 
} 

(我也強烈建議重命名你的枚舉遵循普通的Java命名約定,但這是另一回事。)

+0

你能提出命名約定嗎? – Inquisitive 2013-03-15 16:12:04

+1

@Inquisitive:'InvalidThresholdState' - Java枚舉的名稱應該是PascalCased,就像任何其他類一樣。 – 2013-03-15 16:14:34

+0

感謝您的澄清。代碼中發生了什麼你寫的任務的右側?我之前沒有看到過這個構造。 – Inquisitive 2013-03-15 16:16:21

相關問題