java 如何在列表的记录中解决EI_EXPOSE_REP

xzv2uavs  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(147)

对于以下代码,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

oxf4rvwz

oxf4rvwz1#

除了在构造函数中创建列表的不可变副本外,还需要更新它的getter。

public List<String> ex() {
    return Collections.unmodifiableList(ex);
}

字符串

相关问题