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

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

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

若本文内容有误,请指出,我会更改,谢谢! 转载请注明出处。
原文地址:https://www.cnblogs.com/yellowgg/p/14664480.html