6
4

4 回答 4

7

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

这将解决您不能将 type 的值分配给 typeSet<User.Fields>的变量的事实Set<Field>

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

于 2011-06-30T00:00:19.830 回答
4
于 2011-06-30T00:02:04.607 回答
1

这不起作用的原因是它Set<Fields>不是Set<Field>. 例如,如果您Set<Fields>从方法中返回 a,您可能会遇到如下情况:

Set<Field> fieldSet = user.getFieldSet(); //Returns an EnumSet<Fields>
fieldSet.add(new Field(){}); //Would compile, but would blow up at runtime, 
                             //because the set can only contain Fields enum 
                             //constants

您最好的选择是使用不同的集合实现(通常是不可修改的集合)来返回值。例如:

Set<Field> getFieldSet() {
    return Collections.unmodifiableSet(EnumSet.allOf(Fields.class));
}

或者,如果您需要集合是可变的(通常可能不是一个好主意)

Set<Field> getFieldSet() {
    return new HashSet(EnumSet.allOf(Fields.class));
}
于 2011-06-30T00:10:54.440 回答
0

这是我认为一个很好的解决方案。这不是你想要的,但足够接近

import java.util.EnumSet;
import java.util.Set;

public class User {
    enum Fields implements Field {
        USERNAME,
        PASSWORD;
    }

    Set< ? extends Field> getFieldSet() {
        return EnumSet.allOf(Fields.class);
    }
}
于 2011-06-30T00:00:40.930 回答