あるクラスが Serializable インターフェイスをサポートし、その readObject() メソッドと writeObject() メソッドが常に例外をスローするように定義されていない場合、そのクラスはシリアル化できます。 Serializable クラスは、安全に使用することを目的としたコードでは危険な場合があります。
例:
class DeserializableClass implements Serializable { // クラスに例外をスローする 'writeObject()' メソッドが含まれていません
private int sensitive = 736326;
private void readObject(ObjectInputStream in) {
throw new Error();
}
}
クイックフィックス適用後:
class DeserializableClass implements Serializable {
private int sensitive = 736326;
private void readObject(ObjectInputStream in) {
throw new Error();
}
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
throw new java.io.NotSerializableException("DeserializableClass");
}
}
このインスペクションは、次のオプションを使用して構成できます。
Serializable を継承しているものの、シリアル化を目的としていないクラスを対象としています。
これらのクラスを無視する代わりに、常に例外をスローする readObject() および writeObject() メソッドを追加する方が安全な場合があります。