javaの "郷" を知らないおいらは悩める子羊ちゃん - 関数ポインタがない事に対抗する
「オブジェクト と メソッド名の文字列を渡してリフレクションする」って、Javaのポリシー的にどうなんじゃろう……。 やっぱりあんまり良くないのかしら…
class Food{ public void mix(Food f){}; }; class 乳酸菌 extends Food{}; class 卵焼き extends Food{}; class スコーン extends Food{}; class ほうじ茶 extends Food{}; interface FoodGiver { int toSuigintou(Food food); int toKanaria(Food food); int toSuiseiseki(Food food); int toSouseiseki(Food food); }; void optimizeFood(Food f) { class 謎ジャム extends Food{}; f.mix(new 謎ジャム()); } int invokeGive(FoodGiver g, String strName, Food f) { int r = 0; try { // food に共通のアクションを加える optimizeFood(f); // んで実行 Method fn = g.getClass().getMethod(strName, Food.class); r = (Integer)fn.invoke(fn, f); } catch(NoSuchMethodException e){} // 想定済み catch(InvocationTargetException e){} // 想定済み catch(IllegalAccessException e){} // 想定済み return r; } int invokeSuigintou(FoodGiver g){ return invokeGive(g, "toSuigintou", new 乳酸菌()); } int invokeKanaria(FoodGiver g){ return invokeGive(g, "toKanaria", new 卵焼き()); } int invokeSuiseiseki(FoodGiver g){ return invokeGive(g, "toSuiseiseki", new スコーン()); } int invokeSouseiseki(FoodGiver g){ return invokeGive(g, "toSouseiseki", new ほうじ茶()); }