リフレクションを使用して知ることがテストの良い方法ではないですが、私は自分のコードをテストしようとしています。私は、以下のように公共の方法で公衆たプライベート内部クラスとして外部クラスを持っています
public class Outer {
private class Inner {
private int var = 1;
public Inner(int a) {
System.out.println("___");
}
public void test(int a) {
System.out.println("Hey");
}
}
}
私の主なJavaクラスのルックスは、下記好き
main() {
Outer b = new Outer();
System.out.println(b);
Class<?> innerClass = Class.forName("car.Outer$Inner");
Constructor<?> constructor = innerClass.getDeclaredConstructor(Outer.class, 1);
constructor.setAccessible(true);
Object c = constructor.newInstance(b,b);
Method method = c.getClass().getDeclaredMethod("test");
method.setAccessible(true);
method.invoke(c, 1);
}
これは投げています
スレッドの例外 "メイン" java.lang.NoSuchMethodException:car.A.mainでjava.lang.Class.getDeclaredMethod(Class.java:2130)でcar.Outer $ Inner.test()(A.java:36)
リフレクションを使用してパラメータ取っ内部クラスのメソッドを呼び出す方法?
あなたはへの呼び出しで引数クラス(ES)を供給する必要がありますgetDeclaredMethod()
。あなたが呼び出すとgetDeclaredMethod()
、最初の引数は、あなたが見上げると、残りの引数は、あなたがしたいメソッドに引数(複数可)のクラスでメソッドの名前です。これはどのようにgetDeclaredMethod()
オーバーロードされたメソッド名を区別がある特定のメソッドを取得します。あなたは追加の引数を与えていないので、getDeclaredMethod()
という名前のメソッドを探しているtest
引数を取りません。あなたは、クラスには、このような方法を持っていないので、あなたは、例外を取得していますOuter$Inner
。唯一のtest
あなたが持っているん方法がかかるint
以下は、あなたが欲しいものを行う必要がありますので、parameter`を:
Method method = c.getClass().getDeclaredMethod("test", int.class);
ここでは、int.class
あるClass
プリミティブ引数の型に対応するオブジェクトがint
。