私の課題では、指定された基準に適合する要素のenum
を作成するためにを使用する必要があります。EnumSet
そのため、コードはできるだけ柔軟で、 で宣言されたオブジェクトに適用できるすべての条件を許可する必要がありますenum
。
私は物事をテストしてきました.私のコードには、の最終要素をenum
静的コンテキストに取り込んで、boolean
それらに適用できるようにし、宣言された各オブジェクトをループして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
も問題は解決しないため、キャッシュの問題ではないと思います。では、ブール値が更新されないのはなぜですか? 回避策はありますか?
前もって感謝します!