- - PR -
変数(String型)の中にメソッド名が入ってるのですが、
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-10 15:53
変数(String型)の中にメソッド名が入ってるのですが、
そのメソッドを実行する方法が思いつかないです。 public class aaa { aaa() {} public void test1(String method) { // パラメータの「method」の中に”test2”が入っている } public test2() { } } | ||||
|
投稿日時: 2004-11-10 16:09
javaとリフレクションで検索すると望みのサンプルコードが見つけられると思います。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/reflect/package-summary.html | ||||
|
投稿日時: 2004-11-10 16:10
コンパイルもしてないですが。
| ||||
|
投稿日時: 2004-11-10 16:32
コンパイルを通るようにしてみました。
public void test1(String method) { Method m = null; try { m = this.getClass().getDeclaredMethod(method, null); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } try { m.invoke(this, null); } catch (IllegalArgumentException e1) { e1.printStackTrace(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } catch (InvocationTargetException e1) { e1.printStackTrace(); } } _________________ | ||||
|
投稿日時: 2004-11-11 13:21
Class#getDeclaredMethod と Method#invoke を使用すればいいんですね。
ありがとうございます。 でも、またつまずきました。 呼び出したいメソッドは、同じクラス内ではなく、 すでに別クラスAでインスタンス化されたクラスB内のメソッドです。 これって、呼び出せるのでしょうか? | ||||
|
投稿日時: 2004-11-11 13:57
あいつーです。
質問の意図が図りかねるのですが、 他のクラスでインスタンス化したオブジェクトを使用したいと仰っていますか? つまり、インスタンスへの参照をメソッドの引数として渡すのではなく、 JVMヒープから取得する、ということでしょうか。 | ||||
|
投稿日時: 2004-11-11 14:33
かつやです。
今回のシステム、リモート端末から「サーバ側のメソッド名」と「バイナリデータ」を受信するのですが、 サーバ側は、SwingのJavaアプリ(クラスA)が起動しており、受信用のスレッド(クラスB)も動いてます。 クラスBは、クラスAのメンバになります。 で、クラスB内で受信したメソッド名は、 クラスAのメソッドの場合もあれば、クラスA内のメンバクラスCのメソッドの場合もあります。 概略はこんな感じです。 | ||||
|
投稿日時: 2004-11-11 14:47
普通に、可能ですよ。
Class#getDeclaredMethod()をClassB.classから呼んで、呼び出したいMethodの オブジェクトを取り出し、Method#invoke()の第一引数にClassBインスタンスへの 参照を渡せばオッケーですよ。 ClassBインスタンスへの参照が、その処理を書く位置から見えない位置にある場合は、 それは見えるようにプログラムを改造してくださいとしかいえませんが^^; |
1|2|3
次のページへ»