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
                 ^^^^^^^^^
        }


    }
4

1 に答える 1

8

ジェネリックメソッドを作成したので、誰でも次のように呼び出すことができます。

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

私はそれがあなたの意図したものではないと思います-あなたが戻っintToEnumてきた場合、あなたは呼び出し元にジェネリック型の引数をまったく指定させたくないように見えます、そしてそれはただ次のようになります:

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

(また、通常のJava命名規則に従うように列挙型の名前を変更することを強くお勧めしますが、それは別の問題です。)

于 2013-03-15T16:09:18.743 に答える