我在两个不同的类中有两个枚举(如下所示):
enum State {
NOCAR, SOLD, TO_BUY, TOYOTA, HONDA, NISSAN, BMW, MERCEDES, NO_MONEY
}
enum Car {
TOYOTA, HONDA, NISSAN, BMW, MERCEDES
}
您会看到State
枚举包含Car
枚举的所有可能性。
所以我想做这样的事情:
public void sayHello(Car brand) {
State s = ... // how to convert the brand parameter into the corresponding State enum?
...
...
}
因此,我希望能够以易于理解的最少代码将给定的Car
枚举转换为State
枚举。我知道我可以使用开关,但这浪费了大量代码。所以请在这里帮助我。
答案 0 :(得分:3)
具有一个Car
值,您可以只使用基于名称的查找:
public void sayHello(Car brand) {
State s = State.valueOf(brand.name());
...
}
只要所有Car
值名称都在State
枚举中,这应该一直有效。
答案 1 :(得分:3)
您可以为State枚举提供一个Car类型的私有字段。接下来,添加一个接受Car对象的私有构造函数,并将其存储在所述字段中。然后,您可以像这样声明状态常量
SOLD(null), BMW(Car.BMW),...
但是:从概念上讲,这没有任何意义。汽车是汽车,并且交易可能具有状态和汽车两个属性(状态为“已售出”),但该状态不应反映汽车的类型。含义:从State实例获取Car枚举的任何操作,真正的问题是设计。您已经通过在两个位置具有“相同”常量来复制事物。
您的问题询问如何最好地解决设计不良的症状,真正的答案是:您没有。您可以固定设计,而不是通过导管固定实现。