在这里,Enum1,Enum2和Enum3共享same列表。如何排除他们共享的通用代码?

public enum EnumQ {

    Enum1 ("A", 1, Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k")),
    Enum2 ("B", 1, Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k")),
    Enum3 ("C", 1, Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"));

    private final String foo;
    private final int bar;
    private final List<String> list;

    private EnumQ(
        final String foo, final int bar, final List<String> list) {
        this.foo = foo;
        this.bar = bar;
        this.list = list;
    }
}

最佳答案

您可以将其提取为常数。但是,由于它是一个枚举,因此无法在EnumQ中创建常量。这可以通过使用嵌套的私有类来解决。另外,您应该使该列表不可变。

public enum EnumQ {

    Enum1("A", 1, Constants.STRINGS),
    Enum2("B", 1, Constants.STRINGS),
    Enum3("C", 1, Constants.STRINGS);

    private final String foo;
    private final int bar;
    private final List<String> list;

    EnumQ(String foo, int bar, List<String> list) {
        this.foo = foo;
        this.bar = bar;
        this.list = list;
    }

    private static class Constants {
        private static final List<String> STRINGS = unmodifiableList(asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"));
    }
}

关于java - 如何排除Enum中的通用参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50724028/

10-09 20:59