我刚刚开始在我的 IntelliJ 项目中使用 Firebug。
private byte[] image;
public byte[] getImage() {
return image;
}
public void setImage(byte[] image) {
this.image = image;
}
Firebug 给我错误:
May expose internal representation by incorporating reference to mutable object
我真的不明白这个错误意味着什么以及如何减轻它。
编辑
我的构造函数也遇到此错误:
public Design(byte[] image){
this.image = image;
}
感谢一篇文章,我修复了 Getter 上的错误并理解了它的含义,但是构造函数和 setter 上的错误对我来说不是很清楚。
最佳答案
通过调用getImage()
,您将可以访问私有(private)字段image
。然后,您可以以任何您喜欢的方式在外部对其进行修改,这可能会给您带来不需要的结果。
您可以通过让 getter 返回底层数组的副本来规避它。这样您就可以确保数据的完整性。
所以而不是
public byte[] getImage() {
return image;
}
您可以使用java.util.Arrays.copyOf(byte[] original, int newLength)
public byte[] getImage() {
return Arrays.copyOf(image, image.length);
}
我认为这应该消除该警告并且使用起来更加安全,因为您的数据现在受到保护,免受外部操纵。
关于java - getter 和 setter findbugs 可能会暴露内部表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47134857/