zoukankan      html  css  js  c++  java
  • 解析Java反射

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

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

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

    最后,将代码附上:

    /**
         * 判断trains中是否含有trainClass这个类型的车次,如果有,取出seatClass这个座位类型的票价
         * @param trains
         * @param trainClass
         * @param seatClass
         * @return
         * @throws InvocationTargetException 
         * @throws IllegalAccessException 
         * @throws IllegalArgumentException 
         */
        private SeatItemDomain contain(List<TrainInfoDomain>  trains,String trainClass,String seatClass) throws IllegalArgumentException, 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()); return seatItemDomain; } } } } return null; }

    由于总结时间匆忙,难免出现错误,朋友们如有发现问题或疑问,希望留言。
  • 相关阅读:
    南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup
    SniperOJ-as fast as you can-Writeup
    SniperOj-compare_flag-Writeup
    妙用python之编码转换
    虚拟机安装archLinux+xfce桌面教程(更新时间2017-5-8)
    2017年陕西省网络空间安全技术大赛——人民的名义-抓捕赵德汉2——Writeup
    2017年陕西省网络空间安全技术大赛——一维码——Writeup
    2017年陕西省网络空间安全技术大赛——人民的名义-抓捕赵德汉1——Writeup
    2017年陕西省网络空间安全技术大赛——种棵树吧——Writeup
    整除15问题——北理工网教
  • 原文地址:https://www.cnblogs.com/lidelin/p/9294302.html
Copyright © 2011-2022 走看看