我有一个方法,它将一个对象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问题?
答案 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