У меня есть перечисление Color
, которое имеет около 40 цветов: BLACK
, WHITE
, RED
и т. Д.
У меня есть второе перечисление ColorListPreset
, которое содержит связкунаборов Color
с, таких как PRIMARY
, SECONDARY
, ALL
, ONLY_WHITE
, NOT_WHITE
.Мой вопрос касается этих двух последних записей.
Для каждого Color
я хочу, чтобы ColorListPreset
содержал запись ONLY_
(коллекция размера 1) и запись NOT_
(коллекция размера n-1, например, все Color
с, кроме WHITE
).Сегодня у нас есть только пара NOT_
записей, но мы хотели бы иметь по одной на Color
.
. В настоящее время эти коллекции создаются вручную, но в идеале эти два типа будут автоматически генерироваться из Color
enum, оставаясь доступным через ColorListPreset.NOT_WHITE
таким образом, что моя IDE распознает.
В качестве аргумента, скажем, что доступ к этим значениям через членский доступ (например, ColorListPreset.NOT_WHITE
) важнее, чемусилия, которые идут на поддержание коллекций.
Есть ли способ сделать это?Чисто Java решение идеально.Приветствуются решения, изменяющие тип ColorListPreset
, при условии, что доступ к элементу поддерживается.
Лучшая идея, с которой я пришел (хотя я еще не пытался реализовать), - перечислитьONLY_
и NOT_
перечисляются только в имени, затем генерируют свои коллекции в конструкторе с помощью this.name()
и Color.values()
.У меня нет концепции, где генерируются даже имена перечислений.
Текущие примеры кода:
public enum Color {
BLACK("black", "0x000000"),
GRAY("gray", "0x7f7f7f"),
WHITE("white", "0xffffff"),
RED("red", "0xff0000"),
GREEN("green", "0x00ff00"),
BLUE("blue", "0x0000ff");
// and so on...
}
public enum ColorListPreset {
NONE(Util.arrayListOf()),
ALL(Util.arrayListOf(Color.BLACK, Color.GRAY, Color.WHITE, Color.RED, Color.GREEN, Color.BLUE)),
GRAYSCALE(Util.arrayListOf(Color.BLACK, Color.GRAY, Color.WHITE)),
PRIMARY(Util.arrayListOf(Color.RED, Color.GREEN, Color.BLUE)),
ONLY_WHITE(Util.arrayListOf(Color.WHITE)),
NOT_WHITE(Util.arrayListOf(Color.BLACK, Color.GRAY, Color.RED, Color.GREEN, Color.BLUE));
// and so on...
}
Util.arrayListOf(T... values)
- это просто оболочка вокруг new ArrayList<T>(Arrays.asList(values))
.
Одним из мотивов перечисления ColorListPreset
является синтаксический сахар, например, для XML-файлов.Итак, здесь действуют внешние силы.