java invoke 返回类型_解析Java反射 - invoke方法
最近工作中涉及到获取同程火车票,大概描述为:将本地获取的发出城市,目的城市及出发时间按固定格式封装,调用接口获取可乘坐座席等级最高的火车票,接口返回数据用包含三层类封装的类接受,接受的类总共为四层,倒数第二层为多个类型相同(座席类)的属性类,给最后一层类赋值是通过属性名反射的,也就是说类变量名不同,变量类型相同,最后只有部分变量名有值,其他都为空。在获取具体某个座席时会用到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方法相关推荐
- java 需要返回类型_在Java中,当一个方法不需要返回数据时返回类型必须是
[问答题]在滑动轴承中什么是瓦背?其特点有哪些? [多选题]起重机采用变频调速改造后,有哪些效果? [判断题]当热继电器动作不准确时,可用弯折双金属片的方法来调整. [单选题]X62W型万能铣床进给电 ...
- java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用
Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...
- java 读取ppt文件_解析Java的InputStream类并借助其读取ppt文件
1. 关于InputStream.read() 在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低. ...
- java数组子类型_[改善Java代码]数组的真实类型必须是泛型类型的子类型
List接口的toArray方法可以把一个结合转化为数组,但是使用不方便,toArray()方法返回的是一个Object数组,所以需要自行转变. toArray(T[] a)虽然返回的是T类型的数组, ...
- java识别文件类型_在Java中识别文件类型
我使用 Apache Tika,它使用魔术字节模式和globbing提示(文件扩展名)来识别文件类型,以检测MIME类型.它还支持对文件内容的其他解析(我不真正使用). 以下是一个简单而肮脏的例子,说 ...
- java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...
前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...
- java无法实例化类型_关于java:无法实例化类型List
本问题已经有最佳答案,请猛点这里访问. 我有以下代码: List product = new List(); 错误: Cannot instantiate the type List Product是 ...
- java http 返回码_【Java】Http返回状态码
来自HttpStatus,记录一下 CONTINUE(100, "Continue"), SWITCHING_PROTOCOLS(101, "Switching Prot ...
- java协变返回类型_Java中的协变返回类型
java协变返回类型 协变返回类型 (Covariant return type) The covariant return type is that return type which may va ...
最新文章
- 深入解析Spring架构与设计原理-AOP
- 【Android 逆向】Android 进程注入工具开发 ( SO 进程注入环境及 root 权限获取 | 进程注入时序分析 )
- Python大数据:jieba分词,词频统计
- java分治_【Java算法】什么是分治算法?
- CodeForces 757B Bash's Big Day(线性筛)
- 1026 程序运行时间 (15 分)
- php获取变量数据类型,php如何确定变量的数据类型
- Mac平台上的一个MarkDown编辑器和静态博客生成工具-mweb mac最新版下载
- 2017病毒感染监测(string,BF,附思路与可能WA解析)
- mysql gui tools ojdbc14.jar_[java]OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
- 小米速度!雷军再祭 All in AIoT 大招!
- c语言检查tcp连接_TCP/IP的底层队列
- VC++常用数据类型
- paper 88:人脸检测和识别的Web服务API
- 基于Hadoop的数据分析案例-陌陌聊天软件数据分析
- Kafka高频面试题:夺命10连问
- Codeforces311D. Interval Cubing 神线段树
- XMind 8 Update 8 Pro 激活教程(亲测可用) 国外官网下载 破解教程(带离线安装包)
- 职场人必看丨项目管理十大理念
- java的sort函数中Comparator的简单使用