gpt4 book ai didi

java - 如何嵌套枚举

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:52:09 25 4
gpt4 key购买 nike

我有一些需要在服务器端使用的 UI 客户端过滤器(组合框和复选框组):我想使用枚举来识别过滤器类型,并使用其他枚举来识别每个过滤器的选项。

// All UI filters
public enum FilterType {
AGGREGATION("aggregation"),
AREA("area"),
PRODUCTION("production"),
DATA_TYPE("datatype"),
PRODUCER("producer"),
NETWORK("network"),
SOURCE("source");

private String value;

private FilterType(String value) {
this.value = value;
}

public String getValue() {
return value;
}
}

// FilterType.AGGREGATION filter options
public enum AggregationOptionType {
STANDARD("standard"),
DTR("dtr"),
CO("co");

private String value;

private AggregationOptionType(String value) {
this.value = value;
}

public String getValue() {
return value;
}
}

我想在 FilterType.AGGREGATIONAggregationOptionType 之间创建一个硬链接(hard link),强制通过 FilterType.AGGREGATION.DTR 访问一个选项.

如何将一个枚举“嵌套”在另一个枚举的值中?是否有其他模式(可能比我的更聪明)可以达到相同的结果?

编辑

澄清:我不需要需要为外部枚举的每个值分配一个公共(public)内部枚举的值。我需要为外部枚举的每个值分配一个完全不同的内部枚举。

最佳答案

您可以将一个枚举放入另一个枚举中,例如:

enum OuterEnum {
A, B;
enum InnerEnum {
C, D;
}
}

像这样使用:

class Enumuser {
OuterEnum.InnerEnum ie = OuterEnum.InnerEnum.C;
}

当然,这并不是您要找的。您需要更进一步:

enum OuterEnum {
A(InnerEnum.C), B(InnerEnum.D);

private final InnerEnum inner;

private OuterEnum(InnerEnum inner) { this.inner = inner; }

public InnerEnum getInner() { return inner; }

enum InnerEnum {
C, D;
}
}

class Enumuser {
OuterEnum.InnerEnum inner = OuterEnum.A.getInner();
}

但是警告的最后一句话:不要因为这种目的而使用枚举。你看,一旦你开始在所有地方编写切换此类枚举的 switch 语句,为了做这个或那个......你可能正在做一些错误的事情。请考虑不要“落入枚举陷阱”。

相反,您应该考虑使用多态性,如图所示here !

关于java - 如何嵌套枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40234844/

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