0

私の課題では、指定された基準に適合する要素の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も問題は解決しないため、キャッシュの問題ではないと思います。では、ブール値が更新されないのはなぜですか? 回避策はありますか?

前もって感謝します!

4

2 に答える 2