我不确定我是否过度工程化了,但我正在考虑创建一个枚举,其中包含一个枚举列表作为它的值,从中我可以得到它的值。
enum Country {
US(UnitedStates.values()),
CA(Canada.values());
public ? list;
Country(? list) { this.list = list; }
}
enum UnitedStates {
NJ(new NJClass()),
PA(new PAClass());
private BaseKlass klass;
UnitedStates(BaseClass name){ this.klass = name }
public BaseKlass getKass() { return klass; }
}
enum Canada {
ON(new ONClass());
private BaseKlass klass;
Canada(BaseKlass name){ this.klass = name }
public BaseKlass getKass() { return klass; }
}
我无法确定Country
枚举的类型,以便正确地将值数组筛选到正确的枚举。例如,我可以用Country.valueOf("US")
轻松地获得US枚举。我遇到的困难是从该数组中获得正确的值。我尝试比较名称,Country.valueOf("US"). stream(). Filter(e-
这是可能的还是我想得太多了?
考虑到您不能让Enum
扩展一些定制的父类来实现所需的抽象,我将遵循以下方法
public enum States {
ALABAMA("Alabama", Country.US),
ARIZONA("Arizona", Country.US),
ON("Ontario", Country.CA),
QC("Quebec", Country.CA),
NS("Nova Scotia", Country.CA);
States(String name, Country country){
this.name = name;
this.country = country;
}
private String name;
private Country country;
public List<States> getByCountry(Country country){
return Arrays.stream(States.values()).filter(s -> s.country.equals(country)).collect(Collectors.toList());
}
}
您还可以在初始化期间将这些状态保存在内存中,这样就不会每次都计算哪些状态属于哪个国家。
public enum States {
ALABAMA("Alabama", Country.US),
ARIZONA("Arizona", Country.US),
ON("Ontario", Country.CA),
QC("Quebec", Country.CA),
NS("Nova Scotia", Country.CA);
States(String name, Country country){
this.name = name;
this.country = country;
}
private String name;
private Country country;
private static Map<Country, List<States>> statesMap = initializeStatesMap();
private static Map<Country, List<States>> initializeStatesMap(){
return Arrays.stream(States.values())
.collect(Collectors.groupingBy(state -> state.country,
Collectors.mapping(state -> state, Collectors.toList())));
}
public static List<States> getByCountry(Country country){
return statesMap.containsKey(country) ? statesMap.get(country) : new ArrayList<>();
}
}
然后呢
public enum Country {
US,
CA
}
绝对是过度工程化了。。。我会和你一起去的
enum Country {
US(<array/list of us states is enough>),
CA(<array/list of ca states is enough>);
public List<State> list;
Country(List<State> list) { this.list = list; }
}
问题内容: 目前,我们的代码存在一种情况,即我们在Java层中使用枚举,该枚举通过以下构造函数存储id和“显示值”: 我们希望打字稿中的某些内容能够与之匹配,以便以有意义的方式显示状态以执行逻辑并在前端向用户显示值。这可能吗?有没有更好的方法来解决这个问题?我们希望避免使用诸如status.id()= 1或status.name()=’Active’这样的逻辑,从而推动枚举。 谢谢 问题答案: T
我正在为即将到来的考试做一些修订,我对对象构造函数中枚举的使用有点困惑。
问题内容: 我想知道在Java中是否可以嵌套枚举。 在这里,我想做的是: 拥有一个由CAT和DOG组成的物种,将允许我访问可用CAT和DOG品种的子枚举。例如,我希望能够测试是否装有CAT或DOG,以及动物是否是PERSAN CAT或PITBULL狗。CAT和DOG品种必须是不同的枚举,即CatBreeds枚举和DogBreeds枚举。 这是我要使用的访问模式的示例: 种类: 物种 种狗 品种:
问题内容: 如何从枚举构造函数中引发异常?例如: 产生错误 未处理的异常类型IOException 问题答案: 由于实例是在静态初始化程序中创建的,因此请抛出ExceptionInInitializerError。
我在某处看到了枚举的以下解决方案 这证明了我想做的,除了ArrayBuffer中隐藏了一个var......这有点令人讨厌。 我真正想要的是val lookupTable=Map(),当一个请求进来时,我可以查找“星期一”并将其转换为我的枚举星期一并在整个软件中使用枚举。这通常是如何做到的。我看到了密封的特征,但没有看到一种方法来自动确保当有人添加扩展它的类时,它会自动添加到查找表中。有没有办法使
问题内容: 这个问题是关于Java的有趣行为的:在某些情况下,它为嵌套类生成了其他(不是默认的)构造函数。 这个问题也与Java使用该奇怪的构造函数生成的奇怪的匿名类有关。 考虑以下代码: 这将打印: 好。接下来,让构造函数私有: 再次运行程序。接收: 还可以 但是现在,让我们以这种方式修改方法(添加类创建的新实例): 然后输入变为: 这是什么: a.TestNested $ A(a.TestNe