java反射技术详解(对内部类的处理)
2016-12-02 00:00
549 查看
摘要: java反射技术详解(对内部类的处理)
网上的资料对于如何运用反射将内部类映射出来的资料非常之少,为此我特意花了一个多小时研究了一会儿,下面把研究的结果写到下面。
Class类本身还提供对于获取内部类字节码的方法,分别为getClasses和getDeclaredClasses(),其中getClasses()只能得到访问级别为public的内部类,而getDeclaredClasses()则能得到所有声明了的内部类。
由于内部类可以分为实例内部类,静态内部类,匿名内部类,前面提到的getClasses()和getDeclaredClasses()目前还都只能得到实例内部类和静态内部类,对于后面两种情况却无能为力,为此还需要采取一些特殊的手段才能针对匿名内部类进行反射操作。
下面对内部类进行反射
网上的资料对于如何运用反射将内部类映射出来的资料非常之少,为此我特意花了一个多小时研究了一会儿,下面把研究的结果写到下面。
Class类本身还提供对于获取内部类字节码的方法,分别为getClasses和getDeclaredClasses(),其中getClasses()只能得到访问级别为public的内部类,而getDeclaredClasses()则能得到所有声明了的内部类。
由于内部类可以分为实例内部类,静态内部类,匿名内部类,前面提到的getClasses()和getDeclaredClasses()目前还都只能得到实例内部类和静态内部类,对于后面两种情况却无能为力,为此还需要采取一些特殊的手段才能针对匿名内部类进行反射操作。
public class ReflectInnerClass { public Runnable ta = new Runnable() { public void run() { System.out.println("匿名内部类中的方法被执行了"); } }; private class Inner2 { public Inner2() { System.out.println("Inner2类被实例化了"); } } class Inner3 { public Inner3() { System.out.println("Inner3类被实例化了"); } } public class Inner1 { public Inner1() { System.out.println("Inner1类被实例化了"); } } }
下面对内部类进行反射
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Modifier; public class ReflectInnerClassTest { public static void main(String args[]) { ReflectInnerClass ric = new ReflectInnerClass(); try { reflectInnerClass(ric); } catch (Exception e) { e.printStackTrace(); } } private static void reflectInnerClass(ReflectInnerClass ric) throws Exception { Class clazz = ric.getClass(); Class classes[] = clazz.getDeclaredClasses(); for (Class c : classes) {//对成员内部类进行反射 int i = c.getModifiers(); String s = Modifier.toString(i); if (s.contains("static"))//静态内部类的处理 c.getConstructor().newInstance(); else//实例内部类的处理 c.getConstructor(ric.getClass()).newInstance(ric); } //由于匿名内部类没有构建器,因此无法创建实例,也无法直接访问其中的方法,但可以通过下面的方式巧秒的执行其中的方法或成员变量。 Runnable r = (Runnable) (clazz.getField("ta").get(ric)); r.run(); } }
相关文章推荐
- Java动态图片处理技术详解
- java反射技术详解
- Java高级技术第三章——Java处理时间的方法,详解Date,DateFormat,Calendar类
- java反射——对内部类的处理
- 【技术】Java入门:详解Java异常处理中throw与throws关键字的用法区别
- java反射技术详解
- java反射——对内部类的处理
- java反射技术详解
- Java动态图片处理技术详解
- Tomcat 与java web 开发技术详解笔记(三)----JSP
- java 反射机制详解
- Java图像处理技术之四
- JAVA中的反射机制详解
- Java中文处理, 资源包后缀详解
- JAVA---事件适配器----用内部类,匿名类实现事件处理
- Java开源技术:Eclipse的使用技巧详解
- .net反射技术的应用—如何调用Java的COM接口[转]
- C#的反射技术详解(二)
- C#的反射技术详解(一)
- JAVA 反射技术 万用分页标签 核心代码 (图)