| 質問内容 |
はじめまして。
テストにて、privateなインナークラスに アクセスする必要があるのですが・・・
下記ソースですと、インスタンスを生成できず エラーになってしまい、 インスタンスの型をObjectにすると java.lang.IllegalAccessException ・・・という状況です。
どなたか、アドバイス頂けると助かります。
□□□□□□□□□□□□□□□□□□□□□□□□□
package test002;
import java.lang.reflect.*; import test001.Outer;
public class TestMain { public static void main(String[] args) throws Exception{ Class clazz = Class.forName("test001.Outer$Inner"); Constructor[] c = clazz.getDeclaredConstructors(); Outer.Inner instance1 = (Outer.Inner)c[0].newInstance(new Object[] {new Outer()}); Outer.Inner instance2 = (Outer.Inner)c[1].newInstance(new Object[] {new Outer(),new String("I am Inner(String)")}); // Object instance1 = c[0].newInstance(new Object[] {new Outer()}); // Object instance2 = c[1].newInstance(new Object[] {new Outer(),new String("I am Inner(String)")}); System.out.println("c.length "+ c.length); for(int i = 0; i<c.length; i++){ Object[] params = c[i].getParameterTypes(); for(int j = 0; j<params.length; j++){ System.out.println("c["+ i +"] : "+ params[j]); } } Method meth = clazz.getDeclaredMethod("getInnerString",new Class[]{}); meth.setAccessible(true); System.out.println(meth.invoke(instance2,new Object[]{}));
}
}
□□□□□□□□□□□□□□□□□□□□□□□□□
package test001;
public class Outer { private class Inner { Inner(){ } Inner(String str){ System.out.println("I am Inner."); } private String getInnerString(){ return "innnerString"; } }
}
□□□□□□□□□□□□□□□□□□□□□□□□□
|