Intellij报'Suspicious collections method calls'警告,咨询是否为Bug或遗漏场景
问题解析:IntelliJ IDEA的"Suspicious collections method calls"警告原因
这不是IntelliJ IDEA的Bug,是你对List.remove方法的重载逻辑理解有误,导致调用了不符合预期的方法重载。
核心原因:混淆了List的两个remove重载方法
List接口有两个常用的remove方法:
remove(int index):移除指定索引位置的元素remove(Object o):移除集合中第一个等于该对象的元素
你的代码里,bar是List<String>类型,存的都是String元素;而foo是List<String>对象,当你调用bar.remove(foo)时,实际上触发的是remove(Object o)重载——你试图从存字符串的集合里移除一个列表对象,这在逻辑上完全不可能,因为bar里根本不存在List<String>类型的元素,所以IDEA会弹出这个合理性警告,和集合是否为空没有任何关系。
正确实现需求的方法
如果你想移除bar中所有和foo重叠的元素,应该用removeAll方法:
bar.removeAll(foo);
要是你只是想移除bar中某个位置的元素,才需要用remove(int)重载,比如移除第一个元素:
bar.remove(0);
修改后的示例代码
public class Foo { public static void main(String[] args) { List<String> foo = Arrays.asList("a", "b", "c"); List<String> bar = new ArrayList<>(foo); bar.removeAll(foo); // 移除所有foo中的元素,无警告 System.out.println(bar); // 输出:[] } }
内容的提问来源于stack exchange,提问作者nanotek
相关产品推荐
相关产品推荐

