我在Android Studio中使用 java.lang.SuppressWarnings 软件包。

我不能摆脱这一点:

EI_EXPOSE_REP2: May expose internal representation by incorporating reference to mutable object (findbugs task)

这是使用setter方法进行的。

如何摆脱这个警告?
 public class PropertyDetailDocumentStorageModel implements Parcelable {
 @SerializedName("picture")
 private byte[] mPicture;
 public void setmPicture(byte[] mPicture) { this.mPicture = mPicture; }

警告:

setmPicture(byte[]) may expose internal representation by storing an externally mutable object into PropertyDetailDocumentStorageModel.mPicture

请注意,这仅在类型为byte[]的字段上发生。同一类中具有 setter/getter 的其他字段不会引发此警告。

最佳答案

因此,就像@Thomas建议的那样,数组始终是可变的。
该修复程序返回的是属性的副本,而不是属性本身:

public byte[] getmPicture() { return Arrays.copyOf(mPicture, mPicture.length); }

public void setmPicture(final byte[] picture) { this.mPicture = Arrays.copyOf(picture, picture.length); }

代替
public byte[] getmPicture() { return mPicture; }

public void setmPicture(byte[] picture) { this.mPicture = picture; }

我不知道的是,对于诸如String之类的其他类型,简单的getter总是会返回该对象的副本。数组不是这种情况。

10-08 17:52