• 删除了个无用的参数,结果小丑竟是我自己!


    背景说明:

    技术背景:jsp+structs2

    起因是写一个页面上的操作,很简单的增删改动作

    然后自己没有看底层的代码,自作聪明的删除了。。

    操作步骤:
    1. 继承了封装好的Action类
    2. 定义了个方法
    public XX(PageVO pageVO, User user, ActionMapping mapping, ActionForm form, HrmsHttpRequest request, HrmsHttpResponse response, HttpSession session) throws HrmsException {}
    

    原指原味的参数类型

    3. 后面在使用的过程中,觉得有些参数没有用到,想着删除掉,变成这样

    public XX(PageVO pageVO,ActionMapping mapping, ActionForm form, HrmsHttpRequest request) throws HrmsException {}

    4.结果,界面上直接找不到这个方法,接口没有任何报错

    5.一脸懵逼,先是检查了一遍又一遍bean的配置,路径的路由,jsp文件都检查了下发现没问题。

    6. 后面根据这报错的提示信息搜索到了报错的代码位置,简化后代码如下:

    1. try {
    2. method = (Method) methods.get(name);
    3. if (method == null) {
    4. method = this.getClass().getMethod(name, types);
    5. methods.put(name, method);
    6. }
    7. }

     先是从缓存中获取方法名,发现没有,就通过反射来获取类中对应的这个方法跟属性,

    在放到这个缓存methods中

    types里的内容是这样的:

    发现了问题没有,没有发现没事,我们在往下走一步,看报错提示信息

    问题原因:

    就发现,这里的参数是固定的,你删除了参数,它就找不到这一个对象参数的方法了,它加载的是一个固定的参数列表。

    后来回过头来看这个封装的方法,参数个数类型必须按照这个来写,不然就会报找不到这个方法的错误

    在回头上下其他地方使用这个方法的情况,,果然也是有无用的参数,但是仍保留。

    所以在不知道底层代码的情况下,还是别自作聪明了,别秀操作。

    就像之前网上出现过这种情况,有一个神奇的参数注释是这样的//别删除,我也不知道它是做什么用的,但是删了服务就报错了。。

  • 相关阅读:
    Java字节码学习笔记(一):Java字节码是什么?
    C# 继承
    Python编程基础:实验5——函数定义与调用
    项目篇——java文档搜索引擎
    WebDAV之葫芦儿·派盘 + ES文件浏览器
    解决Jetson TX2风扇无反应的问题 && 同时设置开机自起
    volatile与JMM
    JVM系列之synchronized锁优化
    Xcode编译报错 #error unsupported Swift architecture
    五、同步计数器及源码
  • 原文地址:https://blog.csdn.net/weixin_42450130/article/details/132809749