Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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 无法将fom枚举转换为它实现的接口_Java_Enums - Fatal编程技术网

Java 无法将fom枚举转换为它实现的接口

Java 无法将fom枚举转换为它实现的接口,java,enums,Java,Enums,我在Java7中,我有以下枚举: public enum BooleanEnum implements StringRepresentable{ YES { @Override public String getStringRepresentation() { return "true"; } }, NO { @Override public String getStr

我在
Java7
中,我有以下枚举:

public enum BooleanEnum implements StringRepresentable{
    YES {
        @Override
        public String getStringRepresentation() {
            return "true";
        }
    },
    NO {
        @Override
        public String getStringRepresentation() {
            return "false";
        }
    };
    public abstract String getStringRepresentation();
}
现在我有了方法:

List<StringRepresentable> getValues(){
    return Arrays.asList(BooleanEnum.values()); //Type mismatch: 
                  //cannot convert from List<BooleanEnum> to List<StringRepresentable>
}
List getValues(){
返回Arrays.asList(booleaneum.values());//类型不匹配:
//无法从列表转换为列表
}

那个枚举有什么问题吗?它实现了接口,因此代码应该编译得很好。

如果进行了编译,则有人可以执行以下操作:

List<StringRepresentation> values = getValues();
values.set(0, new SomeOtherStringRepresentation());

首先
booleaneum.values()
返回一个
booleaneum[]
,然后使用
Arrays.asList
返回一个
List

由于
列表
不是
列表
的子集,因此不会编译此代码


理论上,您可以通过返回
列表来编译此代码您的
列表的类型是
StringRepresentation
,而
booleaneum
仅实现
StringRepresentable
接口
不能转换为实现
接口
的任何类型的

它实现了接口,因此代码应该编译得很好

否,因为类型参数被推断为
booleaneum
-并且
列表
不是
列表
。。。您可以将其他
StringRepresentation
实现的实例添加到后者

四种可能的选择:

  • 指定返回的是
    StringRepresentation
    的某个子类的列表:

    List<? extends StringRepresentation> get Values() {
        // Implementation as before
    }
    
  • 根本不返回
    列表
    ;返回一个
    Iterable
    ,此时可以使用
    EnumSet

    Iterable<? extends StringRepresentable> getValues() {
        return EnumSet.allOf(BooleanEnum.class);
    }
    

    Iterable您应该返回如下内容:

     return Arrays.<StringRepresentable>asList(BooleanEnum.values());
    
    返回Arrays.asList(booleaneum.values());
    

    由于BooleanEnum的列表与StringRepresentable的列表不同。

    试试
    List该列表不应该是
    List
    而不是
    List
    ?@Loki,它只是一个打字错误。
    StringRepresentation[] array = BooleanEnum.values();
    return Arrays.asList(array);
    
    Iterable<? extends StringRepresentable> getValues() {
        return EnumSet.allOf(BooleanEnum.class);
    }
    
     return Arrays.<StringRepresentable>asList(BooleanEnum.values());