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