【问题标题】:Getter and setter findbugs May expose internal representation [duplicate]Getter 和 setter findbugs 可能会暴露内部表示 [重复]
【发布时间】:2017-11-06 10:34:05
【问题描述】:

我刚开始在我的 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 上的错误对我来说不是很清楚。

【问题讨论】:

标签: java intellij-idea findbugs


【解决方案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);
}

我认为这应该消除该警告并且使用起来更安全,因为您的数据现在受到保护,不会被外部操纵。

【讨论】:

  • 非常感谢。它解决了 getter 上的错误。我编辑了我的问题,因为我在构造函数和设置器上遇到了同样的错误。
  • @Urban 请ask a new question 而不是更换旧的。
  • 只有我一个人觉得这个警告很荒谬,因为这正是 java 的工作方式。语言中没有 const 或 mut。 “getList().add(2312)”完全没问题。
猜你喜欢
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 2020-06-14
  • 1970-01-01
  • 2010-11-26
  • 2014-09-11
  • 2016-11-09
相关资源
最近更新 更多