当A继承自B时,从EnumSet <A>转换为Set <B>

Ami*_*hum 5 java enums enumset

标题几乎解释了这个问题.我有一个接口方法:

Set<Field> getFieldSet()
Run Code Online (Sandbox Code Playgroud)

我有一个类,User看起来像这样

class User {
    enum Fields implements Field {
        USERNAME, PASSWORD;
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在我想实现UsergetFieldSet()方法.天真的方式似乎只是return EnumSet.allOf(Fields.class)但我得到以下错误:

> Type mismatch: cannot convert from Set<User.Fields> to Set<Field>
Run Code Online (Sandbox Code Playgroud)

除了手动复制EnumSet之外Set<Field>,还有一个很好的方法吗?

Cam*_*ner 6

你可以回来new HashSet<Field>(EnumSet.allOf(Fields.class));.

这将解决您无法将类型值分配给类型Set<User.Fields>变量的事实Set<Field>.

或者,您的界面可以Set<? extends Field> getFields()改为.您可以指定Set<User.Field>捕获变量.