我在Java 7,我有以下枚举:
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>
}
这有什么问题enum?它实现了接口,因此代码应该编译得很好.
它实现了接口,因此代码应该编译得很好.
不,因为类型参数被推断为BooleanEnum- 并且a List<BooleanEnum>不是List<StringRepresentation>......您可以向后者添加其他 StringRepresentation实现的实例.
四种可能的选择:
指定您正在返回以下某些子类的列表StringRepresentation:
List<? extends StringRepresentation> get Values() {
    // Implementation as before
}
指定类型参数:
return Arrays.<StringRepresentation>asList(BooleanEnum.values());
为清晰起见,请使用中间变量:
StringRepresentation[] array = BooleanEnum.values();
return Arrays.asList(array);
根本不回归List<StringRepresentation>; 返回一个Iterable<StringRepresentation>你可以使用的点EnumSet:
Iterable<? extends StringRepresentable> getValues() {
    return EnumSet.allOf(BooleanEnum.class);
}
| 归档时间: | 
 | 
| 查看次数: | 1126 次 | 
| 最近记录: |