本站不再更新,歡迎光臨 java開發技術網
          隨筆-230  評論-230  文章-8  trackbacks-0
          package util;

          import java.lang.reflect.Field;
          import java.lang.reflect.Method;

          import test.web.example.PP;
          /**
           * 
           * 
          @author peidw
           *
           
          */

          public class Reflection {
              
              
          /**
               * 取得參數對象中的公共屬性
               * 
          @param obj
               * 
          @param fieldname
               * 
          @return
               * 
          @throws Exception
               
          */
              
          public Object getProperty(Object obj,String fieldname)throws Exception{
                  Object result
          =null;
                  Class objClass
          =obj.getClass();
                  Field field
          =objClass.getField(fieldname);
                  result
          =field.get(obj);
                  
          return result;
              }
              
          /**
               * 獲得某類的靜態屬性
               * 
          @param className
               * 
          @param fieldName
               * 
          @return
               * 
          @throws Exception
               
          */
              
          public Object getStaticProperty(String className,String fieldName)throws Exception{
                  Class cls
          =Class.forName(className);
                  Field field
          =cls.getField(fieldName);
                  Object provalue
          =field.get(cls);
                  
          return provalue;
              }
              
          /**
               * 獲取參數對象的屬性值
               * 
          @param obj
               * 
          @param propertyName
               * 
          @return
               * 
          @throws Exception
               
          */
              
          public Object getPrivatePropertyValue(Object obj,String propertyName)throws Exception{
                  Class cls
          =obj.getClass();
                  Field field
          =cls.getDeclaredField(propertyName);
                  field.setAccessible(
          true);
                  Object retvalue
          =field.get(obj);
                  
          return retvalue;
              }
              
              
          /**
               * 執行某對象的方法
               * 
          @param owner
               * 
          @param methodName
               * 
          @param args
               * 
          @return
               * 
          @throws Exception
               
          */
              
          public Object invokeMethod(Object owner,String methodName,Object[] args)throws Exception{
                  Class cls
          =owner.getClass();
                  Class[] argclass
          =new Class[args.length];
                  
          for(int i=0,j=argclass.length;i<j;i++){
                      argclass[i]
          =args[i].getClass();
                  }
                  Method method
          =cls.getMethod(methodName,argclass);
                  
          return method.invoke(owner, args);
              }
              
              
          /**
               * 執行靜態類的方法
               * 
          @param className
               * 
          @param methodName
               * 
          @param args
               * 
          @return
               * 
          @throws Exception
               
          */
              
          public Object invokeStaticMethod(String className,String methodName,Object[] args)throws Exception{
                  Class cls
          =Class.forName(className);
                  Class[] argclass
          =new Class[args.length];
                  
          for(int i=0,j=argclass.length;i<j;i++){
                      argclass[i]
          =args[i].getClass();
                  }
                  Method method
          =cls.getMethod(methodName,argclass);
                  
          return method.invoke(null, args);
              }
              
          public Object newInstance(String className,Object[] args)throws Exception{
                  Class clss
          =Class.forName(className);
              
                  Class[] argclass
          =new Class[args.length];
                  
          for(int i=0,j=argclass.length;i<j;i++){
                      argclass[i]
          =args[i].getClass();
                  }
                  java.lang.reflect.Constructor cons
          =clss.getConstructor(argclass);
                  
          return cons.newInstance();
              }
              
          public static void main(String[] args)throws Exception{
                  Reflection rl
          =new Reflection();
                  PP p
          =new PP();
                  rl.getPrivatePropertyValue(p,
          "aname");
              }
          }
          測試類
          package test.web.example;

          import static org.junit.Assert.*;

          import org.junit.Before;
          import org.junit.Test;
          import org.junit.Assert.*;
          import util.Reflection;

          /**
           * 
           * 
          @author peidw
           *
           
          */
          public class ReflectionTest {
              
              
          private PP pp=null;
              
          private Reflection reflection=null;
              @Before
              
          public void setUp() throws Exception {
                  reflection
          =new Reflection();
                  pp
          =new PP();
                  
              }

              @Test
              
          public void testGetProperty() throws Exception{
                  System.out.println(pp);
                  System.out.println(reflection);
                  System.out.println(reflection.getProperty(pp, 
          "address"));
                  
          //assertEquals(reflection.getProperty(pp, "address"), null);
                  
              }

              @Test
              
          public void testGetStaticProperty()throws Exception{
                  assertEquals(reflection.getStaticProperty(
          "test.web.example.PP""count"),"love you");
              }

              @Test
              
          public void testGetPrivatePropertyValue() throws Exception{
                  assertEquals(reflection.getPrivatePropertyValue(pp, 
          "aname"),null);
              }

              @Test
              
          public void testInvokeMethod() throws Exception{
                  assertEquals(reflection.invokeMethod(pp, 
          "setAddress"new Object[]{"合浦西場鎮"}),null);
                  assertEquals(reflection.getProperty(pp, 
          "address"), "合浦西場鎮");
              }

              @Test
              
          public void testInvokeStaticMethod()throws Exception {
                  assertEquals(reflection.invokeStaticMethod(
          "test.web.example.PP""changeCount",new Object[]{"80"}),true);
                  assertEquals(reflection.getStaticProperty(
          "test.web.example.PP""count"),"80");
              }

              @Test
              
          public void testNewInstance() throws Exception{
                  
                  Object vpp
          =reflection.newInstance("test.web.example.PP",new Object[]{"peidw","廣州"});
                  org.junit.Assert.assertNotNull(vpp);
                  
          //assertEquals(reflection.getPrivatePropertyValue(vpp,"aname"),"peidw");
              }



          }
          posted on 2007-08-29 20:47 有貓相伴的日子 閱讀(10401) 評論(2)  編輯  收藏 所屬分類: jdk

          評論:
          # re: java類反射例子 2008-02-27 13:18 | 有貓相伴的日子
          Object obj=cls.newInstance(); 根據class對象生成實例  回復  更多評論
            
          # re: java類反射例子[未登錄] 2013-03-08 17:47 | a
          a  回復  更多評論
            
          <2007年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(32)

          隨筆分類(222)

          隨筆檔案(224)

          文章分類(4)

          文章檔案(7)

          相冊

          收藏夾(4)

          最新評論

          閱讀排行榜

          評論排行榜

          本站不再更新,歡迎光臨 java開發技術網
          主站蜘蛛池模板: 广州市| 台北市| 朝阳县| 深圳市| 青龙| 大埔县| 象山县| 滦南县| 迁安市| 许昌县| 兰坪| 融水| 呼和浩特市| 杂多县| 延寿县| 闽清县| 江都市| 石狮市| 运城市| 钟山县| 胶州市| 和平区| 昌吉市| 内黄县| 樟树市| 嘉义县| 六枝特区| 耒阳市| 新巴尔虎左旗| 大港区| 咸宁市| 西城区| 五指山市| 日喀则市| 长兴县| 卢氏县| 五莲县| 两当县| 深州市| 丹阳市| 永修县|