最近工作中涉及到获取同程火车票,大概描述为:将本地获取的发出城市,目的城市及出发时间按固定格式封装,调用接口获取可乘坐座席等级最高的火车票,接口返回数据用包含三层类封装的类接受,接受的类总共为四层,倒数第二层为多个类型相同(座席类)的属性类,给最后一层类赋值是通过属性名反射的,也就是说类变量名不同,变量类型相同,最后只有部分变量名有值,其他都为空。在获取具体某个座席时会用到Java反射,笔者觉得应该记录下。

首先,在反射之前得获取到具体方法。Java中:getMethods()是获取本类以及父类或者父接口中所有的公共方法(public修饰符修饰的);getDeclaredMethods()是获取本类中的所有方法,包括私有的(private、protected、默认以及public)的方法。在这里笔者采用getMethods(),原因是倒数第二层类获取属性方法都为public。

其次,获取到方法后需要执行该方法才可以获取到返回的数据,所以用到 invoke方法,因为反射的方法没有传参数,所以至需要在里边传入类就行。

最后,将代码附上:

/*** 判断trains中是否含有trainClass这个类型的车次,如果有,取出seatClass这个座位类型的票价

*@paramtrains

*@paramtrainClass

*@paramseatClass

*@return*@throwsInvocationTargetException

*@throwsIllegalAccessException

*@throwsIllegalArgumentException*/

private SeatItemDomain contain(List trains,String trainClass,String seatClass) throwsIllegalArgumentException, IllegalAccessException, InvocationTargetException{if(null == trains || trains.size() == 0 ||StringUtil.isEmpty(trainClass)){return null;

}

//最后一层类

SeatItemDomain seatItemDomain= null;

//存放倒数第二层所有公共方法的方法

Method[] m= null;

//倒数第二层类

TrainInfoDomain domain= null;for (int i = 0; i < trains.size(); i++) {

domain=trains.get(i);if(trainClass.equals(domain.getTrainClass())){

//获取所有公共方法

m=domain.getTickets().getClass().getMethods();for(int j = 0;j < m.length;j++){

//循环遍历,判断方法是否为所需要的方法if(("get"+seatClass).toLowerCase().equals(m[j].getName().toLowerCase())){

//反射,获取最后一层类的数据

seatItemDomain=(SeatItemDomain) m[j].invoke(domain.getTickets());returnseatItemDomain;

}

}

}

}return null;

}

由于总结时间匆忙,难免出现错误,朋友们如有发现问题或疑问,希望留言。

java invoke 返回类型_解析Java反射 - invoke方法相关推荐

  1. java 需要返回类型_在Java中,当一个方法不需要返回数据时返回类型必须是

    [问答题]在滑动轴承中什么是瓦背?其特点有哪些? [多选题]起重机采用变频调速改造后,有哪些效果? [判断题]当热继电器动作不准确时,可用弯折双金属片的方法来调整. [单选题]X62W型万能铣床进给电 ...

  2. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...

  3. java 读取ppt文件_解析Java的InputStream类并借助其读取ppt文件

    1. 关于InputStream.read()     在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低.     ...

  4. java数组子类型_[改善Java代码]数组的真实类型必须是泛型类型的子类型

    List接口的toArray方法可以把一个结合转化为数组,但是使用不方便,toArray()方法返回的是一个Object数组,所以需要自行转变. toArray(T[] a)虽然返回的是T类型的数组, ...

  5. java识别文件类型_在Java中识别文件类型

    我使用 Apache Tika,它使用魔术字节模式和globbing提示(文件扩展名)来识别文件类型,以检测MIME类型.它还支持对文件内容的其他解析(我不真正使用). 以下是一个简单而肮脏的例子,说 ...

  6. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...

    前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...

  7. java无法实例化类型_关于java:无法实例化类型List

    本问题已经有最佳答案,请猛点这里访问. 我有以下代码: List product = new List(); 错误: Cannot instantiate the type List Product是 ...

  8. java http 返回码_【Java】Http返回状态码

    来自HttpStatus,记录一下 CONTINUE(100, "Continue"), SWITCHING_PROTOCOLS(101, "Switching Prot ...

  9. java协变返回类型_Java中的协变返回类型

    java协变返回类型 协变返回类型 (Covariant return type) The covariant return type is that return type which may va ...

最新文章

  1. 深入解析Spring架构与设计原理-AOP
  2. 【Android 逆向】Android 进程注入工具开发 ( SO 进程注入环境及 root 权限获取 | 进程注入时序分析 )
  3. Python大数据:jieba分词,词频统计
  4. java分治_【Java算法】什么是分治算法?
  5. CodeForces 757B Bash's Big Day(线性筛)
  6. 1026 程序运行时间 (15 分)
  7. php获取变量数据类型,php如何确定变量的数据类型
  8. Mac平台上的一个MarkDown编辑器和静态博客生成工具-mweb mac最新版下载
  9. 2017病毒感染监测(string,BF,附思路与可能WA解析)
  10. mysql gui tools ojdbc14.jar_[java]OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
  11. 小米速度!雷军再祭 All in AIoT 大招!
  12. c语言检查tcp连接_TCP/IP的底层队列
  13. VC++常用数据类型
  14. paper 88:人脸检测和识别的Web服务API
  15. 基于Hadoop的数据分析案例-陌陌聊天软件数据分析
  16. Kafka高频面试题:夺命10连问
  17. Codeforces311D. Interval Cubing 神线段树
  18. XMind 8 Update 8 Pro 激活教程(亲测可用) 国外官网下载 破解教程(带离线安装包)
  19. 职场人必看丨项目管理十大理念
  20. java的sort函数中Comparator的简单使用

热门文章

  1. 华为云年度峰会开启云+AI+5G聚变元年
  2. 资产配置那些事-常用理财工具3
  3. 2021-06-07算术
  4. 数据结构学习之路-队列
  5. 个人做SEO怎么赚钱,个人做SEO赚钱的几种方法
  6. 【分享】ST7920的LCD12864 Proteus仿真模型
  7. js+jQuery实现网页打字机效果(带光标)
  8. (七)文件——PHP
  9. 虚拟机Ping网关不通
  10. 医疗时鲜资讯:关注新医改动态