Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

30

Javassistについて

Javassistを使って下の様なプログラムを書き換えるとき
CtClass#getDeclaredMethodを使ってメソッドを書き換えるのですが

public class RewriteTest {
    public static String test1 = "test1";
    public static String test2 = "test2";

    public static void test(String var0){
        System.out.println(test1);
    }

        public static void test(String var0, int var1){
                  System.out.println(test2);
        }
}

このようにオーバーロードされたメソッドを指定するにはどうしたら良いのでしょうか

4

回答

7133

閲覧

4件の回答

評価

0

「test(aaa, bbb)」と普通に引数を2つ指定すれば、自動的に判別してくれて大丈夫です。

評価

0

ありがとうございます
無事解決しました

評価

0

解決方法はgetDecleardMethodを使うのではなくgetMethodの第一引数をメソッドの名前、
第二引数にはJVMの記法?(asmのアレっぽい)を書けば動きました。

上のtestクラスを例にしてみると
例:
    ctClass.getMethod("test", "(Ljava/lang/String;)V");

このようにしてやると無事に動きます。Vは帰り値がvoidということみたいです。
帰り値がString、引数なしの場合
  ctClass.getMethod("test", "()Ljava/lang/String;");

ありがとうございました

評価

0

Declaredの有無は、private等のメソッドを取るかどうかと親クラスに遡るかどうかであって、引数の違いのメソッドを取れるかどうかではない。

第二引数にそんな書き方ができるとは知らなんだが(試してない)、正しいアクセスは最初の回答にある通りだ。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。