java - 设置对象数组时如何修复 FindBug 错误 'May expose internal representation by incorporating reference to mutable object'?

标签 java arrays findbugs

我有一个方法,它将对象数组作为输入并将其存储在实例变量中。下面是执行此操作的代码,但是 FindBugs 报告了一个错误,指出“可能通过合并对可变对象的引用来公开内部表示”。

public final class HelloWorld
{
    public final Hello objs[];

    public HelloWorld(Hello[] inputs)
   {
        this.objs = inputs;
   }

}

我尝试使用 Arrays.copyOf 但是,我仍然收到此错误。

this.objs = Arrays.copyOf(inputs,inputs.length);

如何解决此 FindBugs 问题?

最佳答案

您应该将您的成员(member)更改为私有(private):

private final Hello objs[];

虽然将成员声明为final可以防止它在首次初始化后被分配,但它并不能阻止通过简单地编写以下内容来分配其各个条目:

Hello[] harr = {new Hello(), new Hello()};
HelloWorld hw = new HelloWorld(harr);
hw.objs[1] = new Hello(); // this would mutate the contents of your array member

关于java - 设置对象数组时如何修复 FindBug 错误 'May expose internal representation by incorporating reference to mutable object'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33740360/

相关文章:

php - 如何读取复杂的 PHP 数组?

maven - 在使用 sonar 和 Maven 时如何配置 findbugs

java - @Nonnull 与不同的 IDE - 警告不必要的空检查

java - Findbugs 误报 : Dereference of the result of readLine() without nullcheck

java - Spring MVC - 如何为我的 resttemplate 使用不同的超时?

Java 7 Update 21 Applet 问题

java - 添加一个将 JLabel 扩展到带有 gridlayout 的面板中的类

c - 为什么在这种情况下 char 的输出不同?

arrays - Haskell Chesshs 和数组错误如何定义 `board::Array (Int, Int) (Maybe Piece)`

java - 应用程序需要 13 秒才能显示启动屏幕