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),不报错才怪。。
也不知道当时是怎么通过测试的。。。
在此记录一下,这种低级的隐藏的坑就越要吸取教训。
若本文内容有误,请指出,我会更改,谢谢!
转载请注明出处。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版