如何修复FindBug错误'在设置对象数组时,可以通过合并对可变对象的引用来公开内部表示'?

时间:2015-11-16 16:42:36

标签: java arrays findbugs

我有一个方法,它将一个对象Array作为输入并将其存储在一个实例变量中。以下是执行此操作的代码,但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问题?

1 个答案:

答案 0 :(得分:2)

您应该将您的会员更改为私人:

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