• ベストアンサー

Javaでメソッドの引数にメソッド

以下のようにメソッドの引数にメソッドを渡したいです。 static void methodA(methodB, str) { methodB(str); } static void methodB(str) { System.out.println(str); } つまりメソッドAにメソッド名「methodB」と文字列「str」を渡して、間接的にメソッドBを実行させたいということです。 getMethodやinvokeを使うのかなとは思ったのですが、よく理解できませんでした。 上記のようなことは可能でしょうか?

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

Javaでは、引数にメソッドそのものを渡す方法はまだ有りません。 Java7で導入される事が検討されていましたが、見送られました。 (「Java7 クロージャ」等で検索すると記事が見つかる事と思います。) 現行のJava7とそれ以前のバージョンでは、明示的にクラスを作ってそのインスタンスを渡してやる必要が有ります。 無名クラスが使われることも多いかと思います。 http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3#Java_7_.E4.BB.A5.E5.89.8D 例) ---------------------------------------------- public static void main(String[] args) { methodA( new Executor() { @Override public void exec(String str) { methodB(str); } }, "abc"); } static interface Executor { void exec(String str); } static void methodA(Executor executor, String str) { executor.exec(str); } static void methodB(String str) { System.out.println(str); } -------------------------------------------------- 一方、getMethod や invoke といったリフレクションの機能を使っても実現できますが、あらかじめ対象のメソッドを含むクラスかオブジェクトを決めておくか、java.lang.reflect.Method のオブジェクトとは別に実行対象オブジェクトも渡す必要性が出てくる為、あまりメリットは無いでしょう。 例) ---------------------------------------------- public class TestClass { public static void main(String[] args) throws Exception { final Method method = TestClass.class.getMethod("methodB", new Class<?>[] { String.class }); methodA(method, "abc"); } static void methodA(Method method, String str) throws Exception { method.invoke(TestClass.class, str); } public static void methodB(String str) { System.out.println(str); } } --------------------------------------------------

nomalphard
質問者

お礼

なるほど。よくわかりました。 ありがとうございました。

関連するQ&A

  • Javaについて教えてください!

    OyaクラスのメインメソッドからKoクラス内のメソッドを呼び出して文字列の出力を行いたいのですが、今のままではエラーが出てコンパイル出来ません。どこが間違っているか教えてください!ちなみにエクリプスでの実行には問題はありません。 public class Ko{ public static void ko(){ String str = "KO"; System.out.println(str); }} public class Oya{ public static void main(String[] args){ Ko.ko(); }}

    • ベストアンサー
    • Java
  • このJavaの問題につきまして

    現在Javaの勉強をしているものです。 この問題は私が3時間ほど考えてみたのですがどうしてもわからなくて今回はみなさんに質問をさせていただきました。  問題文の後に私なりに考えたプログラムをまだ途中ではありますが載せておきました。その以降の部分に関しましてどうか答えを教えてください。また途中まで載せている私が作成したプログラムに関しましてもおかし点がありましたらどんどんご指摘なさって結構です。 問題  検索文字列と検索文字をカンマで区切り引数として画面から渡し、メインメソッドからサブメソッドにその引数をを渡し、サブメソッドで検索文字列に検索文字があれば何番目にその文字があるかを返し、該当文字がない場合は0を返します。 メインメソッドで何番目がその文字であるかを出力する処理ex.)  引数:Really a (メニューバーの「実行」をクリックして、中にある「実行」をクリっクし、そこの「引数」という項目に「Really a」と入力する」  出力結果:文字列「Really」のaは3番目にあります。 public class Moji{ public static void main(String[] args){ String str = args[0]; System.out.println(kensaku(str)); } static String kensaku(String str){ StringTokenizer A = new StringTokenizer(str,","); //↓の2行はあまり自信がありません・・・ while(A.hasMoreTokens()); System.out.println(A.nextToken()); //↓ここからわかりません } どうかよろしくお願いします

  • &と|の演算子を使ったif文のプログラムについて

    ↓のプログラムの実行結果について質問します。 public class Test{ public static void main(String args[]){ if(methodA() & methodB() ){ System.out.print(1); }else{ System.out.print(2); } if(methodA() | methodB() ){ System.out.print(3); }else{ System.out.print(4); } } private static boolean methodA(){ System.out.print("A"); return false; } private static boolean methodB(){ System.out.print("B"); return true; } } 上記のプログラムを実行すると AB2AB3 と出力されるのですが、 何故こういう風になるのか教えていただけませんか? また、if文の中をそれぞれ if(methodA() & methodB() ) if(methodA() | methodB() ) と書き換えると A2A3 となるのですが、これについてもイマイチよく分かりません。 メソッドからfalseとtrueを戻り値として受け取り 演算子によって処理を分けているんでしょうけど、 どういう流れで処理が行われているのか 出力結果を見ても読めなくて・・・

    • ベストアンサー
    • Java
  • 実行中のメソッド名

    お世話になります。 実行中のメソッド名を取得することってできますか? public void methodA(){ System.out.println(□□□+"というメソッドが呼ばれました"); } の□□□になにをいれたらよいでしょうか? クラス名は取れる(this.class.getClass().getName())のですが実行中のメソッドってとれないのでしょうか? 以上よろしくお願い致します。

    • ベストアンサー
    • Java
  • 文字の表示

    オブジェクトを受け取るメソッド ↓は引数にString型のオブジェクトを指定するプログラムです public class Sample { public static void main(String args[]) { String str = "abcd"; change(str); System.out.println(str); } private static void change(String str) { str = "efgh"; } } 私の中ではefghがでると思っていたんですが・・ これを実行してみると変数strに最初に代入した文字列が表示されるんです! なぜですか? できれば理由を教えてください 回答よろしくお願いします

  • Javaのメソッド呼び出しについて

    void usage() { System.out.println("zzz"); System.out.println("xxx"); System.out.println("ccc"); } void finish() { System.out.println("aaa"); } 上記の2つのメソッドを、mainメソッドから呼び出したいのですが どうやるのでしょうか? かなり足りない部分があるかと思うんですが、 おしえていただけないですか?

    • ベストアンサー
    • Java
  • Javaの参照渡し

    以下のようなプログラムで望むような結果(下に書いてある実行結果)は得られるでしょうか。 class HelloWorld {   public static void main(String[] args)   {     String str;     makeString1(str);     System.out.println(str);     makeString2(str);     System.out.println(str);   }   public static void makeString1(String str)   {     String words = "HelloWorld!";     str = words;   }   public static void makeString2(String str)   {     str = "HelloWorld!!";   } } ---実行結果--- HelloWorld! HelloWorld!!

    • ベストアンサー
    • Java
  • コマンドラインで配列0~1番目入力したときは?

    使う言語はJava 例えばこんな感じで入力した場合、コマンドラインの配列0~1番目を入力したときコマンドラインでの配列1番目の文字列を値を出力するにはどうしたらいいのでしょうか? コマンドラインを使ってのサンプルソースがあんまり無かった為質問します。 まだまだ初心者脱却していないのでご指導ご鞭撻のほどお願いします。 お早い回答お待ちしています。 java Sample 2012年 1月 1月 考えたサンプルソースはこうです。 public class Ensyuu158 { /** * @param args */ public static void main(String[] args) { for(int i=0; i<args.length; i++){ if(args[i].equals(args[0])){ methodA(args[0]); }else if(args[i].equals(args[1])){ methodB(args[1]); } } }     //コマンドライン配列0~1番目が入力されたら1番目だけの文字列の値を出力する private static void methodB(String str) { System.out.println(str); }     //コマンドラインでの配列0番目が入力されたら0番目だけの文字列の値と文字列を出力したい private static void methodA(String str) { System.out.println(str+"月"); } } }

  • javaの質問です。

    JAVAの質問です。 (replaceを使わない置換) java あいういあ あ !! > !!いうい!! 上のように、引数1に引数2の文字が含まれていればその文字を引数3に置き換えるという問題を解いているのですが、思うようにいきません。引数2が1文字なら簡単なのですが、2文字・3文字の場合が全く分かりません。また、replace系も使うことはできません(replacefirstなど)。 コード例を挙げて頂けないでしょうか? 丸投げなのは重々承知しておりますが、どうかよろしくお願い致します。 class Replace{   public static void main(String args[]){     String str=args[0];     int num = str.indexOf(args[1]);     while(num != -1){       str=(str.substring(0,num)+args[2]+str.substring(num+1));       System.out.print(str);     }     System.out.println();    } } 一応こんな感じかな?と思ってコードを作ってはいるのですが、結果としては散々です。。。

    • ベストアンサー
    • Java
  • 初歩的な メソッドの引数について

    参考書のサンプルなんですが、 Carクラスのメソッドの引数のところで num = n と代入しているのですが、 これを直接void setNum(int num)としたほうがらくだと思うのですがなにか意味があるのでしょうか? class Sample4{ public static void main(String args[]){ Car car1 = new Car(); car1.setNum(33); } } class Car{ int num; void setNum(int n){ num = n; System.out.println("台数" + num); } }

    • ベストアンサー
    • Java

専門家に質問してみよう