激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JAVA教程 - Java反射根據不同方法名動態調用不同的方法(實例)

Java反射根據不同方法名動態調用不同的方法(實例)

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

下面小編就為大家帶來一篇Java反射根據不同方法名動態調用不同的方法(實例)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

list頁面的字段要求可以根據用戶的喜好進行排序,所以每個用戶的字段都對應著不同的順序(字段順序存數據庫),我們從數據庫里取出來的值是對象,但是前臺傳值是用的ajax和json array,所以就面臨著一個對象到json的轉換問題:1. 每個用戶的字段順序不固定,代碼不能寫死, 2. 根據用戶字段順序去取值,如果用if判斷每個值然后調用不同的方法,if條件語句太多。然后就看了下反射。

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方法,省略。
}

測試類

?
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]));
    }
  }
}

樣就可以根據數據庫獲取的字段遍歷從對象去取相應的值了

上面那個方法是要給list添加get方法名,才能根據相應的get方法名去獲取值,如果前臺傳過來的只是一個屬性名,那我們還要轉換成相應的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());
    }
  }

這樣就能直接通過傳過來的propertyName獲取對應的value值了

以上這篇Java反射根據不同方法名動態調用不同的方法(實例)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

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

    eclipse中自動生成javadoc文檔的方法

    這篇文章主要介紹了eclipse中自動生成javadoc文檔的方法,是實用eclipse開發Java程序時非常實用的技巧,對于進行Java項目開發具有一定的參考借鑒價值,需要的朋...

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

    Java截取字符串的方法

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

    wo_soul4262019-12-19
  • JAVA教程Java虛擬機最多支持多少個線程的探討

    Java虛擬機最多支持多少個線程的探討

    這篇文章主要介紹了Java虛擬機最多支持多少個線程的問題,從StackOverflow上摘錄而來,需要的朋友可以參考下 ...

    java教程網3392019-11-19
  • JAVA教程Spring MVC 注解自動掃描失效原因分析

    Spring MVC 注解自動掃描失效原因分析

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

    易連山1412020-05-27
  • JAVA教程詳解 JAVA的回調機制CallBack

    詳解 JAVA的回調機制CallBack

    最近學習java,接觸到了回調機制(CallBack)。初識時感覺比較混亂,而且在網上搜索到的相關的講解,要么一言帶過,要么說的比較單純的像是給CallBack做了一...

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

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

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

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

    舉例講解Java中final關鍵字的用法

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

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

    java隨機字符串生成示例

    這篇文章主要介紹了java隨機字符串生成示例,這個字符隨機生成類可以生成多種組合的字符串,比如大+小字符+數字+符號,需要的朋友可以參考下 ...

    java教程網3362019-11-14
主站蜘蛛池模板: 欧美视频一二三区 | 国产精品中文在线 | 高潮激情aaaaa免费看 | 欧美黄一区| 久久精品免费国产 | 在线一级片| 天堂二区 | www.guochan| 国产无遮挡一级毛片 | 最新中文字幕第一页视频 | 成人在线观看地址 | 久久国产综合精品 | 黄色片视频观看 | 激情久久一区二区 | 中文字幕在线观看1 | 午夜亚洲影院 | 二区视频 | 欧美日本一 | 一区二区三区欧美日韩 | 日韩在线视频观看免费 | 欧美高清在线精品一区二区不卡 | 制服丝袜日日夜夜 | 免费欧美精品 | 91精品国产综合久久久动漫日韩 | 久草在线视频网 | www.777含羞草 | 法国性hdfreexxxx人妖 | 日韩视频在线免费 | 欧美黄色免费视频 | www.9191.com| 色女人在线 | 欧美一级高清免费 | 斗破苍穹在线观看免费完整观看 | 久草在线视频首页 | 国产91精品久久久久久 | 成年片在线观看 | 精品中文字幕久久久久四十五十骆 | 黄色片网站免费在线观看 | 亚洲免费视 | 久久久久久久久久网 | 欧美成人午夜影院 |