Java集合操作常见错误与最佳实践
错误69:搜索无关类型的对象
泛型方法的类型安全漏洞
在Java引入参数化类型前,集合元素只能声明为Object类型,导致可以随意将字符串添加到数值列表中。虽然泛型机制对添加元素的方法进行了类型约束,但搜索和删除相关方法仍保留了Object类型的参数设计。这包括以下关键方法:
- Collection接口:
contains(Object)
和remove(Object)
- List接口:
indexOf(Object)
和lastIndexOf(Object)
- Map接口:
containsKey(Object)
、get(Object)
等7个方法
静默失败的隐患
当传入类型不匹配的参数时,这些方法不会抛出异常,而是返回"未找到"的标识:
- 搜索方法返回
false
或-1
- 删除方法不执行任何操作
retainAll()
方法保留空集合
这种静默处理使得类型错误可能直到生产环境才被发现,典型场景如新旧API混用时: