2016-06-21 6 views
0

私のクラスにはHashMap<MyClass2,Queue<Point2D>>というインスタンスがあります。私のクラスはJPanelを実装しています。 FindBugsのは、私のクラスでHashMapのインスタンスのSE_BAD_FIELDを示しているが、HashMapSerializableを実装しています。私はfindbugs 3.0.0XとJDK 1.7.0_45を使用しています。Findbugs Eclipseプラグインがクラス内のHashMapのインスタンスに対してSE_BAD_FIELDを表示しています

のSe:非過渡非シリアライズインスタンスフィールドシリアライズ クラス(SE_BAD_FIELD)で

この直列化クラスは は、一過シリアライズ、またはjava.langでもない非プリミティブインスタンスのフィールドを定義します。 Objectであり、 は、Externalizableインターフェイスまたは readObject()およびwriteObject()メソッドを実装していないようです。このクラスのオブジェクト は、非シリアル化可能オブジェクト がこのフィールドに格納されている場合、正しくデシリアライズされません。


+0

MyClass2の各フィールドはシリアル化可能ですか? Point2Dはどうですか? – WPrecht

+0

'HashMap'のキーの型と値の型も' Serializable'ですか? – Varun

+0

'MyClass2'は' Serializable'ではありません。 'Point2D'は' java.awt.geom'パッケージからのJavaクラスです。 – Varun

答えて

0

あなたのようにHashMapのフィールドを定義する場合:

private Map<MyClass2,Queue<Point2D>> map = new HashMap<>(); 

Mapインタフェースはシリアル化可能ではないので、あなたが、シリアライズされない可能性があることが、任意のクラスを置くことができますので、あなたが変更した場合にFindBugsは、文句を言うでしょうタイプをHashMap(またはtransientを追加)にすると、警告が表示されなくなります。

+0

'HashMap'に変更すると、' MyClass2'は@WPrechtのように 'Serializable'ではないので、警告を表示します。 - AB3RYは言った。 'Map'のインスタンスを作成した後に' transient'を追加すると、findbugsは** SE_TRANSIENT_FIELD_NOT_RESTORED **エラーを表示します。 – Varun

関連する問題