我在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总是会返回该对象的副本。数组不是这种情况。