java - getter 和 setter findbugs 可能会暴露内部表示

标签 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 上的错误并理解了它的含义,但是构造函数和 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/

相关文章:

java - hibernate 应用程序是域驱动的吗?

java - 在测试项目中找不到从方法 y 引用的类 x

java - 为什么这么红? IntelliJ 似乎认为无法找到/解决每个声明/方法

android - 无法使用最新的gradle版本制作android项目

java - 我可以告诉 findbugs 忽略我无法添加的类吗?

android - Findbugs 失败并显示 "java.io.IOException: No files to analyze could be opened"

java - FindBugs:INT_VACUOUS_BIT_OPERATION

java - 如何从selenium java中的字符串中删除动态子字符串

gradle - 为 IntelliJ IDEA 创建新项目时如何设置 Gradle 包装器版本?

java - Spring 启动 com.sun.jersey.spi.container.servlet.ServletContainer