枚举中的Java查找枚举

时间:2019-03-23 05:05:08

标签: java enums

我在两个不同的类中有两个枚举(如下所示):

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枚举。我知道我可以使用开关,但这浪费了大量代码。所以请在这里帮助我。

2 个答案:

答案 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枚举的任何操作,真正的问题是设计。您已经通过在两个位置具有“相同”常量来复制事物。

您的问题询问如何最好地解决设计不良的症状,真正的答案是:您没有。您可以固定设计,而不是通过导管固定实现。