作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一些需要在服务器端使用的 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.AGGREGATION
和 AggregationOptionType
之间创建一个硬链接(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/
我是一名优秀的程序员,十分优秀!