我在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[]
的唯一字段上。同一类中具有getter的其他字段不会抛出此警告。
答案 0 :(得分:1)
就像@Thomas建议的那样,Arrays总是可变的。 修复程序返回了属性的副本而不是属性本身:
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总是会返回该对象的副本。对于阵列来说情况并非如此。
答案 1 :(得分:0)
在澄清评论中的一些内容后,我认为答案是这样的。
Arrays.copyOf()
返回数组的副本,或者再次禁止警告。通过@SuppressFBWarnings
注释(doc)抑制FindBugs警告。您需要来自FindBugs注释的类路径上的FindBugs lib文件夹中的annotations.jar和jsr305.jar才能使FindBugs注释生效。例如:
@SuppressFBWarnings("URF_UNREAD_FIELD")