クラウドで 伸びる人沈む人 |
|
|
|
任意のクラスで任意のメソッドを実行
<IT技術の処方箋:任意のクラスで任意のメソッドを実行> 任意のクラスで任意のメソッドを実行すると言っても、 一瞬ピンと来ないかもしれないです。 つまり、プログラムの結果に応じて生成するオブジェクトを変更し、 かつ、実行するメソッドを変更したい場合に使うことができます。 「クラスとメソッドを動的に変更する」とでも言うのでしょうか。 これは、説明よりもソースを見てもらったほうがいいでしょう。 testパッケージを作成し、KonクラスとAbcクラスを作成します。 Konクラスを実行すると、全てがわかると思います。 ※これは初級者には難しいかもしれないので、 理解不能の場合は「ふ〜ん」と眺めておきましょう。 ●Konクラスは、↓をコピー package test; import java.lang.reflect.Method; public class Kon { public static void main(String args[]) { try { // クラス名を指定 Class cl = Class.forName("test.Abc"); //****************************************************** // 引数無しの メソッドを取得する Method method = cl.getMethod("first"); // そのまま実行 method.invoke(cl.newInstance()); // メソッドに引き渡すクラスの順番を定義 Class para[] = new Class[] { String.class, int.class }; //****************************************************** // 引数ありのメソッドを取得する Method m = cl.getMethod("first", para); // メソッドに引き渡すパラメータを、オブジェクトの配列で準備 Object[] ob = new Object[] { "xyz", 3 }; // 引数をいれて実行 m.invoke(cl.newInstance(), ob); } catch (Exception e) { e.printStackTrace(); } } } ●Abcクラスは、↓をコピー package test; public class Abc { public void first() { System.out.println("Hello"); } public void first(String str, int i){ System.out.println("Hello hikisuu:" + str + i); } } |