2

使用修饰符在枚举中声明 EnumSetstaticfinal? 或者是多余的?

例子:

public enum Guitar {
    STRATOCASTER,
    LES_PAUL,
    CLASSIC;

    private static final EnumSet electrics = EnumSet.of(STRATOCASTER, LES_PAUL);
}

谢谢!

4

3 回答 3

2

使用修饰符 static 和 final 在枚举中声明 EnumSet 是否有意义?或者是多余的?

不,它们不是多余的。考虑以下示例,其中nonElectrics可以设置,因为它不是final.

import java.util.EnumSet;

enum Guitar {
    STRATOCASTER, LES_PAUL, CLASSIC;

    private static final EnumSet<Guitar> electrics = EnumSet.of(STRATOCASTER, LES_PAUL);
    static EnumSet<Guitar> nonElectrics = EnumSet.of(CLASSIC);

    public static EnumSet<Guitar> getNonElectrics() {
        return nonElectrics;
    }

    public static void setNonElectrics(EnumSet<Guitar> nonElectrics) {
        Guitar.nonElectrics = nonElectrics;
    }

    public static EnumSet<Guitar> getElectrics() {
        return electrics;
    }

    public boolean isElectronics() {
        return electrics.contains(this);
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println(Guitar.STRATOCASTER.isElectronics());
        System.out.println(Guitar.CLASSIC.isElectronics());
        EnumSet<Guitar> electrics = EnumSet.of(Guitar.STRATOCASTER, Guitar.LES_PAUL);
        Guitar.setNonElectrics(electrics);
        System.out.println(Guitar.getNonElectrics());
    }
}
于 2021-02-04T20:02:15.317 回答
1
于 2021-02-04T21:43:19.583 回答
1

这不是多余的,枚举类中的字段不是静态的或最终的。但是,您不能从其他类调用非静态枚举的字段。

于 2021-02-04T19:32:10.820 回答