Getter和setter findbugs可能会暴露内部表示

时间:2017-11-06 10:34:05

标签: java intellij-idea findbugs

我刚开始在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上的错误,并了解它的含义,但构造函数en setter上的错误对我来说并不是很清楚。

1 个答案:

答案 0 :(得分:1)

通过致电getImage(),您将可以访问私人字段image。然后,您可以以任何您喜欢的方式在外部修改它,这可能会给您带来不必要的结果。

您可以通过让getter返回基础数组的副本来绕过它。这样您就可以确保数据的完整性。

所以而不是

public byte[] getImage() {
    return image;
}

您可以使用java.util.Arrays.copyOf(byte[] original, int newLength)

public byte[] getImage() {
    return Arrays.copyOf(image, image.length);
}

我认为应该摆脱这种警告并使用起来更安全,因为现在可以保护您的数据免受来自外部的操纵。