Как выделить общий параметр в Enum? - PullRequest
0 голосов
/ 06 июня 2018

Здесь 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;
    }
}

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вы можете извлечь его постоянным.Однако, поскольку это перечисление, вы не можете создать константу в 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"));
    }
}
0 голосов
/ 06 июня 2018

Вы можете создать вложенное перечисление.

public enum EnumQ {
    Enum1 ("A", 1, ListEnum.A_TO_K),
    Enum2 ("B", 1, ListEnum.A_TO_K),
    Enum3 ("C", 1, ListEnum.A_TO_K);

    private final String foo;
    private final int bar;
    private final ListEnum list;

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

    private enum ListEnum {
        A_TO_K(Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"));
        private final List<String> list;

        private ListEnum(List<String> list) {
            this.list = list;
        }
    }
}

Это имеет больше смысла, когда данные, которые вы перемещаете во вложенное перечисление (здесь список), представляют какую-то отдельную (повторно используемую) сущность / объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...