Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么编译器无法推断我的方法的返回类型?_Java_Generics - Fatal编程技术网

Java 为什么编译器无法推断我的方法的返回类型?

Java 为什么编译器无法推断我的方法的返回类型?,java,generics,Java,Generics,这是我的代码。基本上,我试图从我的intToEnumMap方法返回一个映射。但是编译器不允许这样做。为什么编译器不能推断我的方法的返回类型 public enum INVALIDTHRESHOLDSTATE{ ONE(0,GAUGE_MIN_LOWER_THRESHOLD1_MESSAGE), TWO(1,GAUGE_THRESHOLD1_LOWER_THRESHOLD2_MESSAGE), THREE(2,GAUGE_THRESHOLD2_

这是我的代码。基本上,我试图从我的
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
                 ^^^^^^^^^
        }


    }
公共枚举无效阈值状态{
一个(0,仪表最小值较低阈值1信息),
两个(1,仪表\u阈值1\u下限\u阈值2\u信息),
三个(2,仪表\阈值2 \下限\最大值\信息);
私有静态最终映射intToEnum=newhashmap();
静止的{
int i=0;
对于(INVALIDTHRESHOLDSTATE invalidState:values()){
i++;
intToEnum.put(整数.valueOf(i),invalidState);
}      
}
私有int值;
私有字符串消息;
私有INVALIDTHRESHOLDSTATE(int值,字符串消息){
这个值=值;
this.message=消息;
}
public int getValue(){
返回值;
}
公共字符串getString(){
返回消息;
}
//通用方法
公共静态映射intToEnumMap(){
return intToEnum;//不编译
^^^^^^^^^
}
}
您已经创建了一个通用方法,因此任何人都可以调用:

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

(我还强烈建议重命名您的枚举,以遵循正常的Java命名约定,但这是另一回事。)

您可以建议命名约定吗?@Inquisitive:
InvalidThresholdState
-Java枚举的名称应该是PascalCased,就像任何其他类一样。感谢您的澄清。您编写的作业右侧的代码中发生了什么?我以前没有见过这个构造。@好奇的:它只是为泛型方法调用指定类型参数。听起来您应该阅读Java泛型常见问题解答:)@Javier:如果您不提供它们,是的-但这并不阻止您提供它们。
public static Map<Integer, INVALIDTHRESHOLDSTATE> intToEnumMap() {
    return intToEnum;
}