一直感觉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 |
上面是一个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, 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 ( ) ) ; } } |
这样下来就将參数进行了拼接。当然,这样也有一定的弊端,要处理的对象里面的变量不能是非常复杂的类型。
很多其它文章请前往小胖轩.