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

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

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

posted @   超级VIP  阅读(244)  评论(0编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版
点击右上角即可分享
微信分享提示