java EnumSet,不兼容的类型:推理变量E具有不兼容的边界

时间:2014-12-13 15:11:22

标签: java generics enums enumset

我有一个下面的方法,它返回一个包含Types所有元素的枚举集:

@Override
public EnumSet<?> groupTypes() {
    return EnumSet.allOf(Types.class);
}

Typesenum,如下所示:

public enum Types implements GroupType {
    ASG;
}

GroupType界面是:

 public interface GroupType extends NamedType {

 }

NamedType界面:

public interface NamedType {

    String name();

}

编译时,我得到以下错误:

    error: incompatible types: inference variable E has incompatible bounds
return EnumSet.allOf(Types.class);
                        ^

equality constraints: Types
    upper bounds: Enum<CAP#1>,Enum<E>
  where E is a type-variable:
    E extends Enum<E> declared in method <E>allOf(Class<E>)
  where CAP#1 is a fresh type-variable:
    CAP#1 extends Enum<CAP#1> from capture of ?

1 个答案:

答案 0 :(得分:0)

错误

  

错误:不兼容的类型:推理变量E不兼容   bounds返回EnumSet.allOf(Types.class);

告诉你问题是什么。解决的一种方法是像这样更改签名

public EnumSet<? extends NamedType> groupTypes() {
        return EnumSet.allOf(Types.class);
    }

或者您只需将EnumSet.allOf(Types.class)分配给变量,然后就不需要像这样更改方法签名

public EnumSet<?> groupTypes() {
    EnumSet<Types> typeses = EnumSet.allOf(Types.class);
    return typeses;
}