在我的作业中,我必须使用 anenum
来制作EnumSet
符合给定标准的元素。因此,代码需要尽可能灵活,并允许任何可应用于enum
.
我一直在进行测试,我的代码涉及将最终的 theenum
放入静态上下文中,以便boolean
可以将 a 应用于它们,然后循环遍历 中的每个声明的对象enum
以查看它们是否符合标准。但由于某种原因,当静态字段的值符合条件时,状态boolean
不会更改为。true
这是我的代码:
public class test {
// enumeration of persons by age and sex
enum Name {
Adam("Male", 17),
Amy("Female", 24),
Boris("Male", 12),
Bella("Female", 16);
final String _sex;
final int _age;
// static variants to "turn" values to the static context
volatile static String sex = "";
volatile static int age = 0;
Name(String sex, int age) {
_sex = sex;
_age = age;
}
}
public static void main(String[] args) {
// creating a set of people older than 17
EnumSet<Name> set = makeSet(Name.age >= 17);
System.out.print(set.toString());
}
static EnumSet<Name> makeSet(boolean query) {
EnumSet<Name> set = EnumSet.noneOf(Name.class);
for (Name element : Name.values()) {
// this is the "turning" of the values to the static context
Name.sex = element._sex;
Name.age = element._age;
// PROBLEM LIES HERE
// the query remains false, even when age is above 17
if (query) {
set.addAll(EnumSet.of(element));
}
}
return set;
}
}
将静态字段更改为volatile
也不能解决问题,所以我认为这不是缓存问题。那么,为什么布尔值不更新?有解决办法吗?
提前致谢!