带枚举的泛型集

时间:2020-06-26 09:38:49

标签: java generics enums interface enumset

问题空间已被清除。

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

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

我创建了Items枚举类

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;  
    }
}

返回类型不匹配,我得到编译错误吗?有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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

public class ItemImpl implements ItemInterface {

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

答案 1 :(得分:0)

怎么样,我已经更改了界面,因为它的可读性很强。如果您的界面是任何其他软件包的一部分,则可以使用@Lino答案

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;
    }
}