• List.remove()踩坑记录


    今天项目支付回调出了点问题,原来负责的同事已经离职了,就安排我帮忙查一下,后来排查出来之后觉得应该记录一下,防止踩坑。

    enum EEnum {
            zhifubao(1, "支付宝"),
            weixin(2, "微信"),
            xinyongka(3, "信用卡"),
            
            ;
            private int code;
            private String name;
    
            EEnum(int code, String name) {
                this.code = code;
                this.name = name;
            }
    
            public Integer getCode() {
                return code;
            }
        }
    
        public static void main(String[] args) {
            List<Integer> list = Lists.newArrayList(EEnum.zhifubao.getCode(), EEnum.xinyongka.getCode());
            list.remove(EEnum.xinyongka.getCode());
        }
    

    以上代码乍一看好像没啥,但运行起来就报错了

    java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
    
    	at java.util.ArrayList.rangeCheck(ArrayList.java:657)
    	at java.util.ArrayList.remove(ArrayList.java:496)
    	at com.example.demo.mapper.HelperExtensionMapperTest.testInsert(HelperExtensionMapperTest.java:46)
    

    发现报错结果是索引越界,一看remove(),发现了它的两个重载方法为

    E remove(int index);
    boolean remove(Object o);
    

    重载两个方法一个参数是int,一个参数是Object,再一看,原来枚举里的code是int类型,两个元素,remove(3),不报错才怪。。

    也不知道当时是怎么通过测试的。。。

    在此记录一下,这种低级的隐藏的坑就越要吸取教训。

    若本文内容有误,请指出,我会更改,谢谢! 转载请注明出处。
  • 相关阅读:
    Sharepoint2013搜索学习笔记之创建搜索服务(二)
    Sharepoint2013搜索学习笔记之设置外网内容源(四)
    C# zxing插件 根据输入的字符串生成二维码
    值类型和引用类型
    Web.config增删查改
    Redis
    2017年最好的6个WEB前端开发手册下载
    php implode()函数详解
    elk日志系统搭建
    aop实现接口请求参数打印
  • 原文地址:https://www.cnblogs.com/yellowgg/p/14664480.html
Copyright © 2020-2023  润新知