java,reflection,innerclass, [英] java, reflection , innerclass,
本文介绍了java,reflection,innerclass,的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
您好我想使用反射获取内部类的对象,但我收到了一些错误。
Hi i want to get the object of inner class using reflection but i am getting some error in it.
代码是: -
package reflaction;
public class MyReflection {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class obj = Class.forName("reflaction.MyReflection$TestReflection");
TestReflection a = (TestReflection) obj.newInstance();
a.demo();
}
class TestReflection {
public void demo(){
System.out.println("reflection occurs");
}
}
}
,错误是: - -
and the error is :--
Exception in thread "main" java.lang.InstantiationException: reflaction.MyReflection$TestReflection
at java.lang.Class.newInstance0(Class.java:357)
at java.lang.Class.newInstance(Class.java:325)
at reflaction.MyReflection.main(MyReflection.java:10)
推荐答案
使用此:
public class MyReflection {
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException,
NoSuchMethodException, SecurityException, IllegalArgumentException,
InvocationTargetException {
Class outer = Class.forName("reflaction.MyReflection");
Object outerInstance = outer.newInstance();
Class<?> inner = Class
.forName("reflaction.MyReflection$TestReflection");
Constructor<?> constructor = inner.getDeclaredConstructor(outer);
TestReflection innerInstance = (TestReflection) constructor
.newInstance(outerInstance);
innerInstance.demo();
}
class TestReflection {
public void demo() {
System.out.println("reflection occurs");
}
}
看一下 Javadoc getDeclaredConstructor(Class<?> ... parameterTypes)
。它说:
...如果此Class对象表示在非静态上下文中声明的内部类,则形式参数类型包括显式封闭实例作为第一个参数。
... If this Class object represents an inner class declared in a non-static context, the formal parameter types include the explicit enclosing instance as the first parameter.
因此,将封闭实例作为第一个参数将创建内部类的新实例:
So, giving the enclosing instance as first parameter will create a new instance of the inner class:
TestReflection innerInstance = (TestReflection) constructor
.newInstance(outerInstance);
这篇关于java,reflection,innerclass,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文