如果呼叫者決定是通過將不同的字符串執行什麼邏輯,那麼爲什麼不只是叫他們不同的方法:
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/ –
你可以實現一個命令模式。 –