レポ
クラウドで
伸びる人沈む人

連絡特定商取引将来設計運営方針&メルマガSEの彼女は?
成功レポート集 Fedora9インストール! EclipseでJava Oracleバックアップのアーキテクチャ ゼロからHPでCGI 便利ネット知識
無料レポ&講習 IT業界の実態 linux処方箋 Java処方箋 Oracle処方箋 Perl処方箋
任意のクラスで任意のメソッドを実行

<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);
}

}
さらに補講教材があります。
以下をクリックしてください。

新人用Java勉強環境の準備

Servlet初心者が勘違いする「典型的な間違い」

クラウドで伸びる人沈む人 ||Copyright © 2005-2020 SearchMan,All Rights Reserved.