枚举继承,或类似的东西

Ben*_*nny 7 java inheritance enums

我有一个字符串(这是一条消息),我得到输入,我需要做4种可能的事情之一取决于字符串我知道有eunm.valueOf()选项,但我有4个不同的枚举,每个都有几条可能的消息.

看起来像:

public enum first{ONE,TWO,THREE};
public enum second{FOUR,FIVE,SIX};
public enum third{SEVEN,EIGHT,NINE};

public void work(String message){
    //Here I want to compare message string to one of the 3 enums
}
Run Code Online (Sandbox Code Playgroud)

是否有可能在枚举的一种方法中做到这一点?或者我应该尝试创建一个,如果我得到一个例外尝试另一个等等?

Pét*_*rök 6

正如其他人所评论的那样,考虑一下你是否真的需要4个不同的枚举可能会更好.

但如果你这样做,你可以让他们实现一个通用的接口.然后,您可以将输入字符串映射到相应的枚举成员,并调用其方法来完成您想要的操作.就像是

public interface SomeInterface {
  void doSomething();
};

public enum First implements SomeInterface {
  ONE,TWO,THREE;
  @Override
  public void doSomething() { ... }
};
...
Map<String, SomeInterface> myMap = new HashMap<String, SomeInterface>();
for (First item : First.values()) {
  myMap.put(item.toString(), item);
}
...

public void work(String message){
  SomeInterface obj = myMap.get(message);
  if (obj != null) {
    obj.doSomething();
  }
}
Run Code Online (Sandbox Code Playgroud)

这假定您要执行的4个可能的事情对应于4个枚举.如果没有,您可以单独为每个和任何枚举成员覆盖该方法,例如

public enum First implements SomeInterface {
  ONE,
  TWO {
    @Override
    public void doSomething() { // do something specific to TWO }
  },
  THREE;
  @Override
  public void doSomething() { // general solution for all values of First }
};
Run Code Online (Sandbox Code Playgroud)