2015-12-30 15 views
6

Androidスタジオでjava.lang.SuppressWarningsパッケージを使用しています。Androidの未読フィールドの警告をバイトで返す

私はこの1つを取り除くことができません:それはsetterメソッドで起こっている

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

この警告を取り除く方法に関するアイデアはありますか? ありがとう!

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[]ある専用フィールドに起こっています。ゲッターを持つ同じクラスの他のフィールドは、この警告を投げていません。

+0

警告を抑止しようとしているのですか、コード内の問題を解決しようとしていますか?後者の場合は、コードを参照する必要があります。 –

+0

@Supressで警告を停止する方法を見つけるか、コードがあればコードを改善する別の方法を見つけたいか? – estoke

+0

ありがとう@Thomas、実際にはgetterを持っています: 'public byte [] getmPicture(){return mPicture.clone(); } 'setterのためのbean conventionを私に指摘してくれてありがとう。 ( 'public void setP(T)')Arrays.copyOf()で試してみましょう。最後に、「警告を抑制する」ことをお勧めします。これはまさに私が助けが必要なものです。その警告のキーワードは何ですか? @SupressWarning( "...?)。ありがとう! – estoke

答えて

0

@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; } 

私は知りませんでしたどのような簡単な、例えば文字列のような他のタイプのためにということですgetterは常にオブジェクトのコピーを返します。配列の場合はそうではありません。

0

コメントの一部を明確にした後、私は答えがこれだと思います。

  1. URF_UNREAD_FIELD - 読んようゲッターが存在するならば、FindBugsのは、フィールドはクラスの外部から読み込まれることを前提としているのでフィールドは、カウントされます。それが起こらなければ、さらなる分析や抑制を必要とする何らかの偽陽性があります。
  2. EI_EXPOSE_REP2 - 配列は常に変更可能です。したがって、ゲッターから配列を返すことで、配列を変更することができます。配列のコピーをArrays.copyOf()経由で返すか、警告を抑制します。

FindBugsの警告は@SuppressFBWarningsアノテーション(doc)を介して抑制されます。 FindBugsアノテーションが機能するためには、解析プロセスのクラスパス上のFindBugs libフォルダからannotations.jarとjsr305.jarが必要です。例:

@SuppressFBWarnings("URF_UNREAD_FIELD") 
+0

このソリューションを使用するには、外部ライブラリを追加する必要があります。そして、 - 理由を聞かないでください;) - それはオプションではありません。 – estoke

+0

さて、あなたはFindBugsの警告を抑制する方法を尋ねました。クラスパスを変更できず、これらのJARが存在しない場合、FindBugsの警告を抑制することはできません。 –

+0

確か...しかし、私はまた、エラーの原因を修正して警告を抑えることができます。このバグを公開したとき、私は警告を抑制するために別のライブラリを追加しなければならないということを知らなかったので、あなたの答えは間違いなく私を助けました! – estoke

関連する問題