簡體   English   中英

用byte []取消Android Unread Field警告

[英]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總是會返回該對象的副本。 對於數組而言,情況並非如此。

在澄清評論中的一些內容之后,我認為答案就是這樣。

  1. URF_UNREAD_FIELD - 如果存在getter,則字段計為讀取,因為然后FindBugs假定從類外部讀取字段。 如果沒有發生這種情況,您會出現某種誤報,需要進一步分析或抑制。
  2. EI_EXPOSE_REP2 - 數組總是可變的,因此通過從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM