- - PR -
メソッドは、変数としてメソッド間で受け渡しできないのでしょうか?
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-13 12:21
アプリケーションを作成しながら思ったのですが、メソッドはメソッド間で受け渡しできないのでしょうか。
特定のインスタンスを生成し、そのインスタンスが保持している変数とその変数を使った特定のメソッドを受け渡す事ができれば、便利なのかなぁと思いました。 コンパイルエラーが出ていますが、イメージはこのような感じです。 import java.lang.reflect.Method; public class Exe { public static void main(String[] args) { Exe exe = new Exe(); exe.execute(test.test());//コンパイルエラーになります。 } private void execute(Method met){ //metを実行したい。 } public void test(){ System.out.println("success!!"); } } 実現すればプログラムの幅が膨らみそうなのですが、、、 どなたかご教授頂けませんでしょうか。 よろしくお願い致します。 | ||||||||
|
投稿日時: 2006-10-13 12:27
リフレクションとか使えば似たような機能は実現できそうですが。。。
http://www.hellohiro.com/reflection.htm | ||||||||
|
投稿日時: 2006-10-13 12:36
そういう仕組みは「クロージャ」と呼ばれるもので、Java7での導入が検討されています。
現状ではリフレクションを使うか、インスタンスごと受け渡すしかないですね。 | ||||||||
|
投稿日時: 2006-10-13 12:37
.NET なら delegate を使えば可能ですが、Java では素直にインターフェースを使うのが吉なんじゃないでしょうか。
_________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-10-13 12:55
インターフェース・・・? Javaだとインターフェースでメソッドが受け渡せるのでしょうか? | ||||||||
|
投稿日時: 2006-10-13 12:55
初めて書き込みます。
興味があったので実装してみました。 Methodのinvokeは実行するobjectを必要とするので、 引数にobjectとメソッド名を取ってみました。 無理矢理感漂うコードですが、参考になれば。 -- import java.lang.reflect.Method; public class ExecMethod { public static void main(String[] argc) { ExecMethod test = new ExecMethod(); test.Execute(test, "test"); String a = "a"; String b = (String) test.Execute(a, "toString"); System.out.println(b); } public Object Execute(Object obj, String methodName) { Object result = null; Class exe = obj.getClass(); try { Method exec = exe.getMethod(methodName, null); result = exec.invoke(obj, null); } catch (Exception e) { e.printStackTrace(); } return result; } public void test() { System.out.println("test"); } } | ||||||||
|
投稿日時: 2006-10-13 13:02
interfaceで処理するのが普通ですね。
通常は何かしらの規定された動きを期待するメソッドを 呼び出すことになるでしょうから、引数や戻り値が定義できる interfaceを用いることになります。 シグネチャの定まらないメソッドを自在に呼ぶ共通機能って ちょっと想定できないですからね。 デバッガ類を作るならわからなくもないけど。 リフレクションでも可能ですが、シグネチャが固定される場合は interfaceを使ったほうがまず間違いなくよい設計になるでしょうし、 面倒がないし分かりやすいコードになるでしょうね。 staticなメソッドはともかく、インスタンスメソッドを呼び出すには 対象となるインスタンスも渡さないといけないわけで、 interfaceを用いて実装クラスのオブジェクト渡すのと大差ない。 メソッドからthrowされる例外の扱いとかも間接的に行う必要があるわけで、 あえてリフレクションを使うメリットがない。 自分はクロージャをサポートしている言語は使ったことがないのですが、 どうにもクロージャの説明を読んでも利便性がよく分からないんですよね。 やっぱり実際に使ってみないとピンとこないのでしょうか。 # オブジェクト指向とかDIコンテナとか使うまで利便性がよくわからなかったし。 | ||||||||
|
投稿日時: 2006-10-13 13:03
もちろん無理です。
至って普通ですが、こんな感じです。 #Java 長い事触ってないから、あってるかな…。 _________________ 囚人のジレンマな日々 |
1|2|3
次のページへ»