首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Java中的反照

2012-09-07 
Java中的反射java的反射原理:?测试类:??反射实现类:package com.jlee.testimport java.lang.reflect.Fiel

Java中的反射

java的反射原理:

?

测试类:

?

?

反射实现类:

package com.jlee.test;import java.lang.reflect.Field;import java.lang.reflect.Method;import com.jlee.test.MyBean;/** *  * @author JLee * @Date 2010-3-2 */public class TestReflaction {public static void main(String[] args)throws Exception {MyBean bean = new MyBean();bean.setAmount(Long.parseLong("123123"));bean.setId(2);bean.setIsRight(false);bean.setName("jlee01");bean.setNum(1);System.out.println("修改前:"+bean.toString());TestReflaction t = new TestReflaction();t.mf1(bean, "name", "jlee02");t.mf1(bean, "num", 2) ;System.out.println("第一次修改:"+bean.toString());t.mf2("com.jlee.test.MyBean", "clazzProperty", "static");System.out.println("第二次修改:"+bean.toString());Class[] argTypes = new Class[]{String.class};Object[] args1 = new Object[]{"jlee03"};t.mf3(bean, "setName", argTypes, args1);System.out.println("第三次修改:"+bean.toString());String str = t.mf4("com.jlee.test.MyBean", "staticMethod", new Class[]{String.class}, new Object[]{"结束"});System.out.println(str);}//直接操作对象属性public void mf1(Object o , String fieldName ,Object newValue)throws Exception {Class c = o.getClass() ;Field f = c.getDeclaredField(fieldName);f.setAccessible(true);   f.set(o, newValue);}//直接操作类(Static)属性public void mf2(String className, String fieldName ,Object newValue)throws Exception {Class c = Class.forName(className) ;Field f = c.getDeclaredField(fieldName);f.setAccessible(true);   Object fv = f.get(c);f.set(c, newValue);}//调用对象成员方法public void mf3(Object o,String methodName,Class[] argTypes,Object[] args)throws Exception{Class c = o.getClass() ;Method m = c.getDeclaredMethod(methodName, argTypes);Object result = m.invoke(o, args);}//调用类成员方法(static的方法)public String mf4(String className,String methodName,Class[] argTypes,Object[] args)throws Exception{Class c = Class.forName(className);Method m = c.getDeclaredMethod(methodName, argTypes);Object result = m.invoke(null, args);return result.toString() ;}}

?

热点排行