1

私はいくつかのコードレビューを行っていますが、シリアル化できないフィールドを含むシリアル化可能なクラスに出くわしました。そのフィールドは、一時的なものとして宣言されていません。この種のコードは、コードの臭いと呼ぶことができますか?はいの場合、なぜですか?

public class A implements Serializable{

 private B field ; // B is non serializable

}
4

4 に答える 4

5

オブジェクトの実行時間タイプがシリアル化できない場合、シリアル化しようとすると例外がスローされます。

たとえば、これシリアル化します。

java.io.*をインポートします。

public class Test implements Serializable {
    private Object object;

    public static void main(String[] args) throws Exception {
        Test test = new Test();
        test.object = "";
        // Now serialize test
    }
}

これにより適切なファイルが作成されますが、test.objectがに設定されている場合はnew Object()、例外がスローされます。

B抽象クラスであり、すべての具象サブクラスがシリアル化可能でない限り、それは単なるコードの臭いではありません。または、の値fieldがシリアル化可能またはnullでない限り、シリアル化されないという他の方法を知っている場合は、バグです。

于 2013-03-08T04:52:36.643 に答える
1

これにより、オブジェクトをシリアル化しようとすると例外が発生します(フィールドがnullであるか、実際のオブジェクトがのシリアル化可能なサブクラスである場合を除くB)。

一時的またはシリアル化可能にする(または独自のシリアル化方法を実装する)必要があります。

于 2013-03-08T04:53:19.477 に答える
0

これはフィールドではありませんが、このフィールドが指すオブジェクトがNotSerializableExceptionを引き起こす可能性があります。たとえば、fieldがnullの場合、例外はありません。またはfield、BのSerializableサブクラスであるCのインスタンスを指している場合、例外はありません。

于 2013-03-08T05:03:56.477 に答える
-1

をシリアル化しようとすると、エラーが発生しますA。シリアル化できないためBです。コードの臭いです。

于 2013-03-08T04:53:06.610 に答える