热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Java反射根据不同方法名动态调用不同的方法(实例)

下面小编就为大家带来一篇Java反射根据不同方法名动态调用不同的方法(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

list页面的字段要求可以根据用户的喜好进行排序,所以每个用户的字段都对应着不同的顺序(字段顺序存数据库),我们从数据库里取出来的值是对象,但是前台传值是用的ajax和json array,所以就面临着一个对象到json的转换问题:1. 每个用户的字段顺序不固定,代码不能写死, 2. 根据用户字段顺序去取值,如果用if判断每个值然后调用不同的方法,if条件语句太多。然后就看了下反射。

Model 类,跟正常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方法,省略。
}


测试类

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 list = new ArrayList();

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

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反射根据不同方法名动态调用不同的方法(实例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 探讨在循环中调用$.post()时,回调函数为何会在循环结束后才开始执行,并提供解决方案和优化建议。 ... [详细]
  • 本文详细解析了如何使用Python的urllib模块发起POST请求,并通过实例展示如何爬取百度翻译的翻译结果。 ... [详细]
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 在Web开发过程中,Ajax技术常用于前后端数据交互。其中一个重要的属性async决定了请求是否以异步方式执行,本文将详细解析async属性的作用及使用方法。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 本文介绍了如何利用npm脚本和concurrently工具,实现本地开发环境中多个监听服务的同时启动,包括HTTP服务、自动刷新、Sass和ES6支持。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • 在网页开发中,页面加载速度是一个关键的用户体验因素。为了提升加载效率,避免在PageLoad事件中进行大量数据绑定操作,可以采用异步加载和特定控件来优化页面加载过程。 ... [详细]
  • 深入解析JMeter中的JSON提取器及其应用
    本文详细介绍了如何在JMeter中使用JSON提取器来获取和处理API响应中的数据。特别是在需要将一个接口返回的数据作为下一个接口的输入时,JSON提取器是一个非常有用的工具。 ... [详细]
  • 本文探讨了在使用 Ajax 发送请求时,安卓浏览器出现的重复请求问题。该问题仅出现在安卓设备上,而 iOS 和 PC 端均无此现象。具体表现为服务端接收到多个重复的请求,导致操作逻辑混乱。 ... [详细]
author-avatar
憨哇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有