首页 > 代码库 > Java反射机制的简单应用

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,
            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());
    }
}

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


更多文章请前往小胖轩.

Java反射机制的简单应用