Java反射机制的简单应用

本文介绍了一种使用Java反射机制简化Web开发中客户端向服务器提交参数的方法。通过反射可以自动获取Bean类中的所有字段,并将其转换为URL编码的形式进行拼接,从而避免手动拼接参数的繁琐操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直感觉java的反射机制非常强大,可是可用的地方不多。在android学习的时候。一直想实现挂断电话的功能,可是系统并没有提供开放的api接口,看了一下网上使用反射机制来实现该功能,确实非常强大,非常有用。

 

今天在相应的web开发中,client须要提交參数给server,自己已经写好了相应的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个属性,在请求server时,我须要将其拼接为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,
             IllegalAccessExceptionUnsupportedEncodingException  {
          //设置属性
        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  (< fields. length  -  1 )
                sb. append ( "&" ) ;
         }
         System. out. println (sb. toString ( ) ) ;
     }
}

这样下来就将參数进行了拼接。当然,这样也有一定的弊端,要处理的对象里面的变量不能是非常复杂的类型。


很多其它文章请前往小胖轩.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值