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),不报错才怪。。
也不知道当时是怎么通过测试的。。。
在此记录一下,这种低级的隐藏的坑就越要吸取教训。
若本文内容有误,请指出,我会更改,谢谢!
转载请注明出处。