天天看點

Java反射機制的簡單應用

一直感覺java的反射機制很強大,但是可用的地方不多。在android學習的時候,一直想實作挂斷電話的功能,但是系統并沒有提供開放的api接口,看了一下網上使用反射機制來實作該功能,确實很強大,很實用。

今天在對應的web開發中,用戶端需要送出參數給伺服器,自己已經寫好了對應的bean檔案,但是每一次都需要就其内部的key-value進行拼接,比較麻煩,突然想起了了反射機制,嘗試了一下,确實非常的好用。下面看一下代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public  class Bean {

     String name ;

     String property ;

     public  String getName ( )  {

         return name ;

     }

     public  void setName ( String name )  {

         this. name  = name ;

     }

     public  String getProperty ( )  {

         return property ;

     }

     public  void setProperty ( String property )  {

         this. property  = property ;

     }   

}

上面是一個Bean類,有2個屬性,在請求伺服器時,我需要将其拼接為name=xxx&property=xxx,一個還好,很多這樣的憑借就需要将其抽象出來了,下面使用反射機制對其拼接。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import  java.io.UnsupportedEncodingException ;

import  java.lang.reflect.Field ;

import  java.net.URLEncoder ;

import  java.util.HashMap ;

import  java.util.Map ;

public  class ParamsUtil  {

     public  static  void main ( String [ ] args )  throws  IllegalArgumentException,

             IllegalAccessException,  UnsupportedEncodingException  {

          //設定屬性

        Bean bean  =  new Bean ( ) ;

        bean. setName ( "blog.androiddevelop.cn" ) ;

        bean. setProperty ( "master" ) ;

          //擷取所有變量

         Field [ ] fields  = bean. getClass ( ). getDeclaredFields ( ) ;

         StringBuffer sb  =  new  StringBuffer ( "" ) ;

         for  ( int i  =  0 ; i  < fields. length ; i ++ )  {

            sb. append (fields [i ]. getName ( ) ) ;

            sb. append ( "=" ) ;

            sb. append ( URLEncoder. encode ( String. valueOf (fields [i ]. get (bean ) ),

                     "UTF-8" ) ) ;

             if  (i  < fields. length  -  1 )

                sb. append ( "&" ) ;

         }

         System. out. println (sb. toString ( ) ) ;

     }

}

這樣下來就将參數進行了拼接。當然,這樣也有一定的弊端,要處理的對象裡面的變量不能是很複雜的類型。

更多文章請前往小胖軒.