我想要一個static
映射,其中的值是實例方法。有點像:在靜態上下文中存儲對實例方法的引用
public class MyClass {
static Map<MyEnum, Consumer<String>> methodMapping;
static {
methodMapping = new EnumMap<>(MyEnum.class);
methodMapping.put(MyEnum.FIRST, MyClass::firstMethod);
methodMapping.put(MyEnum.SECOND, MyClass::secondMethod);
}
void firstMethod(String param) {
...
}
void secondMethod(String param) {
...
}
}
這給了我一個錯誤,說「非靜態方法不能從靜態上下文中引用」。我明白爲什麼這會是一個問題,如果我嘗試從靜態上下文中調用方法,但不能從實例方法從地圖中檢索方法並將其傳遞給this
?像:
MyClass.methodMapping.get(MyEnum.FIRST).accept(this, "string");
這種設計看起來有點古怪。小心解釋這種枚舉到方法映射背後的想法? – Kayaman
@Kayaman重構目的,實例方法中有一個長開關,從每個分支調用不同的方法。我不想爲每個方法中的一種方法創建許多子類。 – Levi