- 締切済み
変数を使ってクラス・メソッドの呼び出し
お世話になります。 細かい所で違う動作ですが、似たような動作のクラス、もしくはメソッドを大量に用意しないといけない場合、 またそれらを同じタイミングで状況に応じて使い分けたい場合、 皆さんならどうなされてますか? C言語では呼び出すファイル名やサブルーチンを変数を使って呼び出せるので それらの名前に連番を入れて状況に応じて変数を変化させれば良かったのですが Javaでも似た様な事って出来ますか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- miyajima24
- ベストアンサー率75% (6/8)
具体的にどういう事がしたいかがわかりませんが、 要は微妙に異なる実装だけど殆ど同様の振る舞いをするメソッドを、 ダックタイピング的に扱いたいという事でしょうか? それならば、インターフェースを使う方法や、デフォルトの動作を指定したメソッドを持つクラスを用意し、それを実際に使う場所で無名クラス等で再定義して使うという方法が考えられますが……。 後者の例としては class Foo{void meth(){System.out.println("デフォルトの動作");}} public class Sample6 { private static Foo[] fooDef = { new Foo(){void meth(){System.out.println("再定義した動作1");}}, new Foo(){void meth(){System.out.println("再定義した動作2");}}, new Foo(){void meth(){System.out.println("再定義した動作3");}} }; public static void main(String[] args) { Foo[] foo = new Foo[4]; for (int i = 0; i < 4; i++){ foo[i] = i < 3 ? Sample6.fooDef[i]:new Foo(); foo[i].meth(); } } } 等でしょうか。 求めている物に全くかすっていなければ申し訳ありません。
- salsberry
- ベストアンサー率69% (495/711)
> C言語では呼び出すファイル名やサブルーチンを変数を使って呼び出せるので > それらの名前に連番を入れて状況に応じて変数を変化させれば どういうことをしたいのかが今ひとつ分かりません。 簡単なコード例を示すことはできますか? > Javaでも似た様な事って出来ますか? 当てずっぽうで答えると、たとえばClass.forName()メソッドを使うと引数で指定した名前のクラスオブジェクトを得ることができるので、その引数の文字列を変化させることで様々なクラスを使うことができます。 ClassクラスにはgetMethod()メソッドもありますから、そこに渡すメソッド名の文字列を変化させて対応するメソッドを得ることもできます。