Java 反射机制实例

Java反射机制访问私有变量,私有方法,在Junit测试中很好用。
反射细节方面可参考:http://www.cnblogs.com/crazypebble/archive/2011/04/13/2014582.html

以下代码作为参考:

package com.refl.test;


public class ReflectTest {

    /**
     * @param argss
     */
    public static void main(String []argss)
    {
     try{
         //访问单个私有变量
//       Class cls = Class.forName("com.refl.person.Person");  
//       Field fld = cls.getDeclaredField("studentCount");
//       fld.setAccessible(true);
//       Object obj = cls.newInstance();
//       fld.set(obj, "测试");         //改变该私有变量的值
//       System.out.println(fld.get(obj));


         //访问单个私有变量
//       Person person = new Person();
//       Class cls = person.getClass();
//       Object obj = cls.newInstance();
//       Field fld = cls.getDeclaredField("studentCount");
//       fld.setAccessible(true);
//       fld.set(obj, "测试");         //改变该私有变量的值
//       System.out.println(fld.get(obj));

         //访问所有变量,当然也包括私有的
//       Class cls = Class.forName("com.refl.person.Person");
//       Field []field = cls.getDeclaredFields();
//       for(Field fld : field)
//       {
//           fld.setAccessible(true);
//           System.out.println(fld.get(cls.newInstance()));
//       }
     }catch(Throwable e)
     {
         e.printStackTrace();
     }
    }

}

package com.refl.person;

public class Person {
    private String studentCount = "4";
    public int age = 23;
    private String getName(String N1, String N2)
    {
        System.out.println("studentCount = " + studentCount);
        return "Jack";
    }

    public String getGender(String N1, String N2)
    {
        return "male";
    }
}
//访问私有方法
Class[] classArray = {Scenario.class, Alarm.class};
Method method = c.getDeclaredMethod("endScenarioStep", classArray);
method.setAccessible(true);
Object[] args = {getScenario(), alarm};
method.invoke(logic, args);
//Junit测试代码
public void testProblemManageProcess021() {
        try {
            Alarm alarm = getAlarm("Alarms_0080001" , 2);
            S2NMAL0080001Blogic logic = new S2NMAL0080001Blogic();
            Map<String, String> workflow = new HashMap<String, String>();
            workflow.put(logic.STEP_AFT, "step1001");
            Class c = logic.getClass();
            Field fld = c.getSuperclass().getDeclaredField("workflow");
            fld.setAccessible(true);
            fld.set(logic, workflow);

            Class[] classArray = {Scenario.class, Alarm.class};
            Method method = c.getDeclaredMethod("endScenarioStep", classArray);
            method.setAccessible(true);
            Object[] args = {getScenario(), alarm};
            method.invoke(logic, args);
        } catch (Throwable t) {
            t.printStackTrace();
            fail(t.getMessage());
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值