2013-03-15 148 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

相关问题