最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年08月05日 15:06:22   投稿:jingxian  
下面小編就為大家?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è)用戶的字段順序不固定,代碼不能寫(xiě)死, 2. 根據(jù)用戶字段順序去取值,如果用if判斷每個(gè)值然后調(diào)用不同的方法,if條件語(yǔ)句太多。然后就看了下反射。

Model 類(lèi),跟正常model一樣

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è)試類(lèi)

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方法,麻煩。

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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 了解java中的session

    了解java中的session

    這篇文章主要介紹了了解java中的session的相關(guān)問(wèn)題,什么是session,session怎么用等,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java?輕松入門(mén)使用Fiddler抓包工具教程

    Java?輕松入門(mén)使用Fiddler抓包工具教程

    超文本傳輸協(xié)議(HTTP)是一個(gè)簡(jiǎn)單的請(qǐng)求-響應(yīng)協(xié)議,其主要是基于TCP來(lái)實(shí)現(xiàn)的,可以通過(guò)Chrome開(kāi)發(fā)者工具或者Wireshark或者Fiddler抓包,以便分析?HTTP?請(qǐng)求/響應(yīng)的細(xì)節(jié),本篇博客主要談?wù)撊绾问褂肍iddler抓取HTTP,當(dāng)然也可以抓取HTTPS
    2022-02-02
  • springbatch的封裝與使用實(shí)例詳解

    springbatch的封裝與使用實(shí)例詳解

    主要實(shí)現(xiàn)批量數(shù)據(jù)的處理,我對(duì)batch進(jìn)行的封裝,提出了jobBase類(lèi)型,具體job需要實(shí)現(xiàn)它即可。這篇文章主要介紹了springbatch的封裝與使用 ,需要的朋友可以參考下
    2019-04-04
  • Java instanceof和getClass()區(qū)別實(shí)例解析

    Java instanceof和getClass()區(qū)別實(shí)例解析

    這篇文章主要介紹了Java instanceof和getClass()區(qū)別實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • JAVA異常處理機(jī)制之throws/throw使用情況

    JAVA異常處理機(jī)制之throws/throw使用情況

    這篇文章主要介紹了JAVA異常處理機(jī)制之throws/throw使用情況的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Volatile關(guān)鍵字的使用案例

    Volatile關(guān)鍵字的使用案例

    這篇文章主要介紹了Volatile關(guān)鍵字的作用,Volatile關(guān)鍵字的作用主要有兩個(gè),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • spring多個(gè)事務(wù)管理器踩坑及解決

    spring多個(gè)事務(wù)管理器踩坑及解決

    這篇文章主要介紹了spring多個(gè)事務(wù)管理器踩坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SpringBoot框架RESTful接口設(shè)置跨域允許

    SpringBoot框架RESTful接口設(shè)置跨域允許

    這篇文章主要為大家詳細(xì)介紹了SpringBoot框架RESTful接口設(shè)置跨域允許,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • JavaFX實(shí)現(xiàn)界面跳轉(zhuǎn)

    JavaFX實(shí)現(xiàn)界面跳轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了JavaFX實(shí)現(xiàn)界面跳轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java實(shí)現(xiàn)多線程的上下文切換

    Java實(shí)現(xiàn)多線程的上下文切換

    這篇文章主要介紹了Java實(shí)現(xiàn)多線程的上下文切換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論

九寨沟县| 彭阳县| 唐海县| 修文县| 阜新市| 大安市| 环江| 金昌市| 灵台县| 通渭县| 盐城市| 工布江达县| 灵川县| 贡嘎县| 岳阳县| 商水县| 义马市| 武定县| 简阳市| 都兰县| 双辽市| 开原市| 嘉祥县| 平塘县| 灵宝市| 汉沽区| 革吉县| 利川市| 香港| 峨眉山市| 长葛市| 荃湾区| 如皋市| 开平市| 普兰县| 象山县| 锦屏县| 九江市| 威宁| 永清县| 永康市|