[英]Suppress Android Unread Field warning with byte[]
我在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的其他字段不會拋出此警告。
就像@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總是會返回該對象的副本。 對於數組而言,情況並非如此。
在澄清評論中的一些內容之后,我認為答案就是這樣。
Arrays.copyOf()
返回數組的副本,或者再次禁止警告。 通過@SuppressFBWarnings
注釋( doc )抑制FindBugs警告。 您需要來自FindBugs注釋的類路徑上的FindBugs lib文件夾中的annotations.jar和jsr305.jar才能使FindBugs注釋生效。 例:
@SuppressFBWarnings("URF_UNREAD_FIELD")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.