java - 当 A 从 B 继承时从 EnumSet 转换为 Set
问问题
3265 次
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 回答