• 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),不报错才怪。。

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

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

    若本文内容有误,请指出,我会更改,谢谢! 转载请注明出处。
  • 相关阅读:
    Unity3D脚本修改默认编码界面
    Winform异步初始化UserControl的问题
    Windows API实现移动窗体
    BackgroundWorder控件
    Winform复杂界面异步加载
    TabControl设置选项卡的大小
    VS2010尝试运行项目时出错,无法启动程序
    winform开发-CheckedListBox控件
    tomcat配置https访问
    用户svn密码自定义
  • 原文地址:https://www.cnblogs.com/yellowgg/p/14664480.html
Copyright © 2020-2023  润新知