2011-12-02 14 views
2

私はJavaリフレクションの基礎とクラスのメソッドに関する情報を観察しています。私はgetMethod()関数で記述されているような仕様にマッチするメソッドを取得する必要があります。しかし、私はこれを行うとNoSuchMethodExceptionが発生し、私の実装が間違っている理由を教えてくれることを期待していました。Java Reflection、getMethod()

static void methodInfo2(String className) throws ClassNotFoundException, 

NoSuchMethodException{ 

     Class cls = null; 
     try{ 
      cls = Class.forName(className); 
     } catch(ClassNotFoundException e){ 
      e.printStackTrace(); 
     } 
     System.out.println("Cls: "+cls); 


     Method method1 = cls.getMethod("test", null); 
     System.out.println("method1: "+method1); 


    } 

EDIT1:私は "のCl:" プリントアウトした場合+ CLSを、出力は ":クラスa8.myclass2のCl" です。なぜそれがクラスの部分を追加するのですか? (a8は正しいので、心配しないでください)/ EDIT1

これは私のメイン関数からクラスを読み込むために使用する関数で、getMethod()にパラメータ "test" nullは「test」はメソッドの名前で、nullはメソッドにパラメータがないことを意味します。私が読んでいるクラスは、ここにあるmyclass2と呼ばれます。

package a8; 

public class myclass2 { 

    void test(){ 
     //"takes no parameters" 
     //"returns bool" 
     //"name starts with test" 
     //return true; 
    } 

} 

ご覧のとおり、このメソッドはクラス内に存在します。あなたが私の間違いを指摘できるなら、本当に感謝します。

答えて

8

テストメソッドを公開します。 Class.getMethod()はpublicメソッドに限定されていると思います。

+0

それは、あなたは私にそれを打つ。 +1 getMethod()のJavaDocから: "このClassオブジェクトが表すクラスまたはインタフェースの指定された** public **メンバメソッドを反映するMethodオブジェクトを返します。 –

+0

ありがとう:)それは働いた – Nibirue

3

正確な例外と出力を投稿しないと、クラスは2つの別々のパッケージにあり、メソッドのデフォルトの修飾子はちょうどprotectedなので失敗すると思われます。

getDeclaredMethod()を使用すると、通常は表示されない方法が表示されます。

+0

いいえ、彼らは同じパッケージ内にあった。上記の答えはうまくいった。 – Nibirue

+0

デフォルトはprivateに設定されています。いずれにしても、もしあなたが 'getDeclaredMethod()'を使うと、**何かにアクセスすることができます**。 – jli