如果呼叫者决定是通过将不同的字符串执行什么逻辑,那么为什么不只是叫他们不同的方法:
public void doSomething(String actionID) {...}
...
doSomething("dance");
doSomething("sleep");
VS:
public void dance() {...}
public void sleep() {...}
...
dance();
sleep();
好像你不必要地将所有呼叫汇入doSomething
但字符串可能并不总是文字。如果你从控制台拿走他们会怎么样?
你可以到相应的功能,提供了从字符串的静态映射:
class MyClass {
private static final Map<String, Consumer<MyClass>> map = new HashMap<>();
static {
map.put("sleep", MyClass::sleep);
map.put("dance", MyClass::dance);
}
public void doSomething(String actionID) {
map.getOrDefault(actionID, MyClass::doNothing).accept(this);
}
public void dance() {
System.out.print("I'm dancing");
}
public void sleep() {
System.out.print("I'm sleeping");
}
private void doNothing() {
System.out.println("I've no idea what I'm doing");
}
}
这使得在那里你有很多的开关情况下,很多清洁方案。
可能是可能是你正在寻找这样的事情? http://crunchify.com/why-and-for-what-should-i-use-enum-java-enum-examples/ –
你可以实现一个命令模式。 –