値がインスタンスメソッドである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");
設計ビットファンキー見えること。このenum-to-methodマッピングの背後にある考え方を説明するのに気をつけますか? – Kayaman
@Kayamanリファクタリングの目的で、インスタンスメソッドに長いスイッチがあり、各ブランチから異なるメソッドを呼び出すことができました。私はそれぞれの中でただ一つのメソッドのために多くのサブクラスを作成したくありませんでした。 – Levi