gpt4 book ai didi

java - Java 编译时生成枚举

转载 作者:行者123 更新时间:2023-11-30 05:44:52 24 4
gpt4 key购买 nike

我有一个枚举 Color ,大约有 40 种颜色:BLACK , WHITE , RED

我有第二个枚举 ColorListPreset ,其中包含一堆 Color 的集合s,如PRIMARY , SECONDARY , ALL , ONLY_WHITE , NOT_WHITE 。我的问题涉及最后两个条目。

对于每个 Color ,我要ColorListPreset包含 ONLY_条目(尺寸 1 的集合)和 NOT_条目(大小为 n-1 的集合,例如除 Color 之外的所有 WHITE )。我们只有一对NOT_今天正在使用的条目,但希望每个 Color 有一个条目.

目前,这些集合是手工管理的,但理想情况下这两种类型将从 Color 自动生成。枚举,同时仍然可以通过 ColorListPreset.NOT_WHITE 访问以我的 IDE 能够识别的方式。

为了便于讨论,假设通过成员访问(例如 ColorListPreset.NOT_WHITE )来访问这些值比维护集合所付出的努力更重要。

有办法实现这一点吗?纯 Java 解决方案是理想的。更改 ColorListPreset 类型的解决方案欢迎,只要保持成员(member)访问即可。

我想到的最好的想法(尽管我还没有尝试实现)是列出 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 的一个动机enum 是 xml 文件等的语法糖。所以,这里有外部力量在起作用。

最佳答案

我建议你更改ColorListPreset某种“ build 者” Set<Color>List<Color> 。它不应该是一个枚举。

public class ColorListPreset {
public static Set<Color> only(Color color) {
return EnumSet.of(color);
}

public static Set<Color> not(Color color) {
return EnumSet.complementOf(EnumSet.of(color));
}

// methods that return other color sets...
}

使用示例:对于ColorListPreset.NOT_WHITE ,你会写 ColorListPreset.not(Color.WHITE) .

关于java - Java 编译时生成枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55036953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com