A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 迷失的独白 于 2014-8-29 21:12 编辑
  1. package mystudyexercisejava;
  2. import java.lang.reflect.Modifier;  
  3.   
  4. public class ReflectInnerClassTest {  
  5.   
  6.     public static void main(String args[]){  
  7.         ReflectInnerClass ric=new ReflectInnerClass();  
  8.         try {  
  9.             reflectInnerClass(ric);  
  10.         } catch (Exception e) {  
  11.             e.printStackTrace();  
  12.         }   
  13.     }  
  14.   
  15.     private static void reflectInnerClass(ReflectInnerClass ric) throws Exception {  
  16.         Class clazz=ric.getClass();  
  17.         Class classes[]=clazz.getDeclaredClasses();  
  18.         for(Class c:classes){//对成员内部类进行反射  
  19.             int i=c.getModifiers();  
  20.             String s=Modifier.toString(i);  
  21.             if(s.contains("static"))//静态内部类的处理  
  22.                  c.getConstructor().newInstance();  
  23.             else//实例内部类的处理  
  24.                 c.getConstructor(ric.getClass()).newInstance(ric);  
  25.         }  
  26.         Runnable r=(Runnable)(clazz.getField("ta").get(ric));  
  27.         r.run();            
  28.     }  
  29. }

  30. class ReflectInnerClass {      
  31.     public Runnable ta=new Runnable(){  
  32.         public void run(){  
  33.             System.out.println("匿名内部类中的方法被执行了");  
  34.         }  
  35.     };  
  36.     class Innerc{  
  37.         public Innerc(){  
  38.             System.out.println("Inner3类被实例化了");  
  39.         }  
  40.     }        
  41.     private class Innerb{  
  42.         public Innerb(){  
  43.             System.out.println("Inner2类被实例化了");  
  44.         }  
  45.     }        
  46.     public static class Innerd{  
  47.         public Innerd(){  
  48.             System.out.println("Inner4类被实例化了");  
  49.         }  
  50.     }      
  51.     public class Innera{  
  52.         public Innera(){  
  53.             System.out.println("Inner1类被实例化了");  
  54.         }  
  55.     }  
  56. }
复制代码



      c.getConstructor(ric.getClass()).newInstance(ric);  这句话
  

2 个回复

倒序浏览
具体什么问题呀?
回复 使用道具 举报
java_dream 发表于 2014-8-29 21:47
具体什么问题呀?

c在当前是一个内部类
但是为什么
getConstructor(ric.getClass())
newInstance(ric)
这两句话的参数都是外部类,还有具体是怎么操作的?
我现在只能懵懂的明白一点,就是想知道为什么要传这两个参数,而不是内部类.class
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马