黑马程序员技术交流社区
标题:
关于反射问题 访问内部类问题??
[打印本页]
作者:
回首、后_街
时间:
2013-4-26 20:36
标题:
关于反射问题 访问内部类问题??
本帖最后由 回首、后_街 于 2013-4-27 20:44 编辑
//内部类信息
public class Demoto6 {
class Demo{
public void show(){
System.out.print("内部类中信息。。。。。");
}
}
}
Demoto6.Demo demo = new Demoto6().new Demo();
demo.show();//调用内部类方法
//如何使用反射机制获取Demoto6类中的内部类
Class<?> clazz = Class.forName("com.java.oop.to.Demoto6");
Method method = clazz.getDeclaredMethod("show");
Object obj = clazz.newInstance();
method.invoke(obj);
//想要访问Demoto6类中的Demo内部类中的show()方法 找了挺多资料 不知道怎么弄
作者:
何俊森
时间:
2013-4-27 10:49
本帖最后由 何俊森 于 2013-4-27 11:01 编辑
//DemoTest
package org.klaus.reflecttest;
public class DemoTest {
class Demo{
public void show(){
System.out.println("这是内部类中的方法!");
}
}
}
复制代码
//InvokeShowDemo
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class InvokeShowDemo {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class<?> c1 = Class.forName("org.klaus.reflecttest.DemoTest"); //实例化Class对象
//System.out.println(c1.getDeclaredClasses().length);只有一个默认构造函数
Class<?> c2 = c1.getDeclaredClasses()[0]; //实例化内部类Class对象
//System.out.println(c2.getName());
//System.out.println(c1.getDeclaredConstructors().length); 只有一个默认构造函数
// Constructor<?> c = c1.getConstructors()[0]; //获取默认构造函数 ,也可以用这种方法来实例化内部类
//System.out.println(c2.getDeclaredConstructors().length);
Constructor<?> cDemo = c2.getDeclaredConstructors()[0]; //获取默认构造函数
cDemo.setAccessible(true);//仅当内部类是public时,不用设置为true
Object obj = cDemo.newInstance(c1.newInstance()); //实例化内部类,需要外围类的一个实例
Method met = c2.getMethod("show"); //获取内部类中的方法
// met.setAccessible(true); //仅当要获取的方法是public时,不用设置访问true;
//System.out.println(met.getName());
met.invoke(obj); //调用内部类中的方法
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2