对于以下代码,Spotbugs引发警告EI_EXPOSE_REP(可能通过返回对可变对象的引用来暴露内部表示):
public record Example(
List<String> ex) {
public Example {
ex = List.copyOf(new ArrayList<>(ex));
}
}
字符串
在FindBugs raises a bug called EI_EXPOSE_REP caused by Array中,类似的东西被提出作为一种解决方案。但它似乎不再起作用了。有任何提示如何解决这个问题吗?这是Spotbugs中的一个bug吗?如果没有其他方法,那么就抑制它:有没有可能在字段级别而不是类级别抑制它?
最后,我需要一个解决方案,也在一个Null -安全的方式工作。为此,我引入了自己的copyOf
方法。如果解决方案在结束时以null安全的方式工作,那就太好了。(但是,如果我使用自己的copyOf
方法,或者java.util.List
中的方法,Spotbugs警告会独立出现)
public static <T> List<T> copyOf(List<T> listToCopy) {
if (listToCopy == null) {
return Collections.emptyList();
}
//noinspection Java9CollectionFactory: cannot be replaced as List.copyOf is not null safe.
return Collections.unmodifiableList(new ArrayList<>(listToCopy));
}
型
不支持copyOf
,也不支持unmodifiableList
。
1条答案
按热度按时间oxf4rvwz1#
除了在构造函数中创建列表的不可变副本外,还需要更新它的getter。
字符串