Java反射機制的簡單應用
一直感覺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{ hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27m%20Feeling%20Lucky" style="">String name; hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27m%20Feeling%20Lucky" style="">String property; hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27m%20Feeling%20Lucky" style="">String 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, 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( hl=en&q=allinurl%3Aurlencoder+java.sun.com&btnI=I%27m%20Feeling%20Lucky" style="">URLEncoder.encode(String.valueOf(fields[i].get(bean)), |
這樣下來就將參數進行了拼接。當然,這樣也有一定的弊端,要處理的對象裏面的變量不能是非常復雜的類型。
很多其它文章請前往小胖軒.
Java反射機制的簡單應用