/** * 反射内部类 * @author zhangyu * @date 2022/1/8 */ public class OuterClass { public void process() { System.out.println("外部类方法..."); } class InnerClass { public void process() { System.out.println("内部类方法..."); } } }
[1] Um das interne Klassenobjekt zu erhalten, muss man sich auf das Objekt der externen Klasse verlassen.
[2] Um das interne zu erhalten Klasse bis Klasse kann auf zwei Arten sein
Der erste: Class.forName("package.name.OuterClass I n n e r C l a s " ) durch InnerClass") durch InnerClass" ) durch Symbolpositionierung Zur inneren Klasse
Zweitens: Verwenden Sie OuterClass.class.getDeclaredClasses() über die äußere Klasse Klasse, um die unter der äußeren Klasse verfügbaren Objekte der inneren Klasse zu erhalten
#🎜 🎜#@Test public void test5() throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException, ClassNotFoundException { //需要依赖外部类对象实例化内部类 Class outerClass = Class.forName("reflection.demo.OuterClass"); Object outerObject = outerClass.newInstance(); //如果知道外部类下内部类数量,那么通过下面方式即可 Class<?> innerClass = OuterClass.class.getDeclaredClasses()[0]; //如果知道内部类全限定名,可以通过下面的方式 //Class<?> innerClass = Class.forName("full.package.name.OuterClass$InnerClass") //获取默认构造器 Constructor<?> constructor = innerClass.getDeclaredConstructors()[0]; //也可以通过下面的方式获取构造器 //Constructor<?> constructor = innerClass.getDeclaredConstructor(OuterClass.class); //默认构造器私有的,需要设置可访问 constructor.setAccessible(true); //通过构造器和父类Class创建内部类实例 Object innerObject = constructor.newInstance(outerObject); Method innerClassDeclaredMethod = innerClass.getDeclaredMethod("process"); innerClassDeclaredMethod.setAccessible(true); innerClassDeclaredMethod.invoke(innerObject); }
/** * 反射内部类 * @author zhangyu * @date 2022/1/8 */ public class OuterClass { private String name; public OuterClass(String name) { this.name = name; } public void process() { System.out.println("外部类方法..."); } class InnerClass { private String name; public InnerClass(String name) { this.name = name; } public void process() { System.out.println(name+"----内部类方法..."); } } }
Das obige ist der detaillierte Inhalt vonSo erhalten Sie nicht statische innere Klassen durch Reflektion in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!