【发布时间】:2021-11-15 05:59:43
【问题描述】:
根据参数动态确定一组类似结构的枚举。
示例:
public enum StateUS {
CALIFORNIA(Sacramento,...)
private String capital;
...
}
public enum StateIN {
KARNATAKA(Bangalore,...)
private String capital;
...
}
public enum Countries {
US, IN
}
// in a different class
public <> getStates(Countries country){
// to return Country.US.equals(country) ? StateUS : StateIN
// so the return enum class can be used for business logic.
}
根据枚举Countries的值,需要决定是使用StateUS还是StateIN。
使用枚举实现相同功能的最佳方法是什么?可以实现工厂类来决定枚举吗?
我能想到的解决方案是将枚举转换为类并创建一个工厂类。但这是一个乏味的过程,并且需要太多的锅炉代码来获得枚举功能(例如:比较)。
【问题讨论】:
-
您的用例是什么?请注意,枚举是类。在您的情况下,当您想要返回
StateUS或StateIN时,它实际上意味着您想要返回Class<? extends Enum>,因为无法以任何其他方式考虑这两个。这真的是你想要的吗? -
您真正想要返回什么?状态列表或类型(即 StateUS 或 StateIN)?
-
@MirekPluta 是的,我想返回类,我们可以从类中获取枚举的实例吗?这样我们就可以将引用用作常规枚举持有者。例如:getStates(US).valueOf("california") 或 getStates(US).doSomething()(在 Enum 中定义)
-
@ernest_k 枚举类型