一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)

Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)

2020-06-02 11:32jingxian JAVA教程

下面小編就為大家?guī)?lái)一篇Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

list頁(yè)面的字段要求可以根據(jù)用戶的喜好進(jìn)行排序,所以每個(gè)用戶的字段都對(duì)應(yīng)著不同的順序(字段順序存數(shù)據(jù)庫(kù)),我們從數(shù)據(jù)庫(kù)里取出來(lái)的值是對(duì)象,但是前臺(tái)傳值是用的ajax和json array,所以就面臨著一個(gè)對(duì)象到j(luò)son的轉(zhuǎn)換問(wèn)題:1. 每個(gè)用戶的字段順序不固定,代碼不能寫死, 2. 根據(jù)用戶字段順序去取值,如果用if判斷每個(gè)值然后調(diào)用不同的方法,if條件語(yǔ)句太多。然后就看了下反射。

Model 類,跟正常model一樣

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Person {
 
  private String name;
  private int age;
  private String address;
  private String phoneNumber;
  private String sex;
 
 
  public String getName() {
    return name;
  }
// 以下是get 和set方法,省略。
}

測(cè)試類

?
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
 
public class Test {
 
  // init person object.
  private Person initPerson() {
    Person p = new Person();
 
    p.setName("name");
    p.setAge(21);
    p.setAddress("this is my addrss");
    p.setPhoneNumber("12312312312");
    p.setSex("f");
 
    return p;
  }
  
  public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    Test test = new Test();
    Person p = test.initPerson();
    List<String> list = new ArrayList<String>();
 
    // Add all get method.
 
    // There is no ‘()' of methods name.
 
    list.add("getName");
    list.add("getAge");
    list.add("getAddress");
    list.add("getPhoneNumber");
    list.add("getSex");
    
    for (String str : list) {
 
  // Get method instance. first param is method name and second param is param type.
 
  // Because Java exits the same method of different params, only method name and param type can confirm a method.
 
      Method method = p.getClass().getMethod(str, new Class[0]);
 
  // First param of invoke method is the object who calls this method.
 
  // Second param is the param.
 
      System.out.println(str + "(): Get Value is  " + method.invoke(p, new Object[0]));
    }
  }
}

樣就可以根據(jù)數(shù)據(jù)庫(kù)獲取的字段遍歷從對(duì)象去取相應(yīng)的值了

上面那個(gè)方法是要給list添加get方法名,才能根據(jù)相應(yīng)的get方法名去獲取值,如果前臺(tái)傳過(guò)來(lái)的只是一個(gè)屬性名,那我們還要轉(zhuǎn)換成相應(yīng)的get方法,麻煩。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void getValueByProperty(Person p, String propertyName) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    // get property by the argument propertyName.
    PropertyDescriptor pd = new PropertyDescriptor(propertyName, p.getClass());
    Method method = pd.getReadMethod();
    Object o = method.invoke(p);
    System.out.println("propertyName: " + propertyName + "\t  value is:  " + o);
  }
  
  public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException {
    Test test = new Test();
    Person p = test.initPerson();
    
 
// get all properties.
    Field[] fields = p.getClass().getDeclaredFields();
    for (Field field : fields) {
      getValueByProperty(p, field.getName());
    }
  }

這樣就能直接通過(guò)傳過(guò)來(lái)的propertyName獲取對(duì)應(yīng)的value值了

以上這篇Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
  • JAVA教程eclipse中自動(dòng)生成javadoc文檔的方法

    eclipse中自動(dòng)生成javadoc文檔的方法

    這篇文章主要介紹了eclipse中自動(dòng)生成javadoc文檔的方法,是實(shí)用eclipse開發(fā)Java程序時(shí)非常實(shí)用的技巧,對(duì)于進(jìn)行Java項(xiàng)目開發(fā)具有一定的參考借鑒價(jià)值,需要的朋...

    shichen20141342019-12-06
  • JAVA教程Java截取字符串的方法

    Java截取字符串的方法

    這篇文章主要介紹了Java截取字符串的方法,實(shí)例分析了java中substring方法的使用技巧,需要的朋友可以參考下 ...

    wo_soul4262019-12-19
  • JAVA教程Java虛擬機(jī)最多支持多少個(gè)線程的探討

    Java虛擬機(jī)最多支持多少個(gè)線程的探討

    這篇文章主要介紹了Java虛擬機(jī)最多支持多少個(gè)線程的問(wèn)題,從StackOverflow上摘錄而來(lái),需要的朋友可以參考下 ...

    java教程網(wǎng)3392019-11-19
  • JAVA教程Spring MVC 注解自動(dòng)掃描失效原因分析

    Spring MVC 注解自動(dòng)掃描失效原因分析

    這篇文章主要介紹了Spring MVC 注解自動(dòng)掃描失效原因分析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下 ...

    易連山1412020-05-27
  • JAVA教程詳解 JAVA的回調(diào)機(jī)制CallBack

    詳解 JAVA的回調(diào)機(jī)制CallBack

    最近學(xué)習(xí)java,接觸到了回調(diào)機(jī)制(CallBack)。初識(shí)時(shí)感覺(jué)比較混亂,而且在網(wǎng)上搜索到的相關(guān)的講解,要么一言帶過(guò),要么說(shuō)的比較單純的像是給CallBack做了一...

    Bro__超3022020-04-17
  • JAVA教程微信支付java版本之查詢訂單

    微信支付java版本之查詢訂單

    這篇文章主要為大家詳細(xì)介紹了微信支付java版本之查詢訂單,為大家分享了微信支付訂單的查詢接口,感興趣的小伙伴們可以參考一下 ...

    wangxuewei1113912020-06-02
  • JAVA教程舉例講解Java中final關(guān)鍵字的用法

    舉例講解Java中final關(guān)鍵字的用法

    Java中的final關(guān)鍵字可以被用來(lái)修飾變量、方法和類等,意味著終結(jié)、不可改變,下面我們就來(lái)舉例講解Java中final關(guān)鍵字的用法: ...

    腳本之家1652020-05-17
  • JAVA教程java隨機(jī)字符串生成示例

    java隨機(jī)字符串生成示例

    這篇文章主要介紹了java隨機(jī)字符串生成示例,這個(gè)字符隨機(jī)生成類可以生成多種組合的字符串,比如大+小字符+數(shù)字+符號(hào),需要的朋友可以參考下 ...

    java教程網(wǎng)3362019-11-14
主站蜘蛛池模板: 国产精品九九免费视频 | 久久毛片网站 | 无删减影视免费观看 | 免费人成在线观看69式小视频 | 国产精品视频免费一区二区三区 | 国产精品亚洲午夜一区二区三区 | 99久久免费看国产精品 | 好吊色青青青国产综合在线观看 | 日韩视频在线观看中字 | 欧美高清日韩 | 日韩欧美亚洲每日更新网 | 欧美特黄aaaaaa | 香蕉在线精品一区二区 | 国内外成人在线视频 | 久久这里只有精品视频9 | 手机看片福利 | 超h 超重口 高h 污肉1v1 | 女仆色永久免费网站 | 亚洲国产精品免费在线观看 | 免费一级毛片在级播放 | chanelpreston欧美网站 | 日韩精品免费一级视频 | 色男人网 | 精品小视频在线观看 | a级情欲片在线观看hd | videojapan日本孕交孕 | 国产精品视频第一页 | 成年男女免费视频观看性 | 99爱在线观看精品视频 | 91香蕉视频导航 | 色综合天天综合网国产人 | 教室眠催白丝美女校花 | 日本中文字幕黑人借宿影片 | 美女扒开胸罩露出奶 | 亚洲精品视频在线免费 | 草莓视频深夜释放 | 日本公与妇中文在线 | 色老板最新网站视频地址 | 免费成年网 | 闺蜜高h | 99久久精品免费看国产一区二区 |