带有枚举的泛型集

Generics Set with Enums

问题 space 已被简化。

所以我有以下无法更改的界面。

public interface ItemInterface {
  Set<Enum<?>> getItems();
}

我已经创建了 Items 枚举 class

public enum Item{
  ITEM1, ITEM2, ITEM3 
}

所以当我实现方法时它没有编译。

public class ItemImpl implements ItemInterface {

    @Override
    public Set<Enum<?>> getItems() {
        Set<Item> vals = new HashSet<>();
        vals.add(Item.ITEM1);
        return vals;  
    }
}

return 类型不匹配,出现编译错误?有什么想法吗?

只需将 vals 声明为 Set<Enum<?>>:

public class ItemImpl implements ItemInterface {

    @Override
    public Set<Enum<?>> getItems() {
        Set<Enum<?>> vals = new HashSet<>();
        vals.add(Item.ITEM1);
        return vals;  
    }
}

这个怎么样,我已经更改了界面,因为它只是让它有点可读性。如果您的界面是任何其他包的一部分,可以使用@Lino answer

public interface ItemInterface {

    Set<? extends Enum> getItems();
}



public enum Item implements ItemInterface{
    ITEM1, ITEM2, ITEM3;

    @Override
    public Set<? extends Enum> getItems() {
        Set<Item> as = new HashSet<>();
        as.add(ITEM3);
        return as;
    }
}