2012-04-08 20 views
-1

スーパークラスのクラスが既にJavaでシリアライズ可能なインターフェイスを実装していて、Javaでシリアライズ可能なインターフェイスを実装していないため、インターフェイスを実装できないため、はい、新しいクラスのシリアル化を避ける方法があります。 java直列化を避けるには、クラスにwriteObject()とreadObject()メソッドを実装し、それらのメソッドからNotSerializableExceptionをスローする必要があります。これは、上記の質問に記載されているようにJavaシリアル化プロセスをカスタマイズすることのもう1つの利点であり、通常はインタビューの進捗状況に応じてフォローアップの質問をします。 EX用シリアライゼーションの制御

は...

class Animal implements Serializable 
{ 
int weight = 42; 
} 

and there is a subclass... 

class Dog extends Animal 
{ 
    private void writeObject(ObjectOutputStream o) 
          throws IOException, ClassNotFoundException 
    { 
     //throw nonserializable exception 
    } 

    private void readObject(ObjectInputStream o) 
     throws IOException, ClassNotFoundException 
    { 
      //throw nonserializable exception 
    } 

} 

あなたは()およびwriteObject()readObjectメソッド内Dogクラスで上で見たように私に助言してもらえ..スーパーがあり、私はに指示するコードを書くことができますかnonserilizable例外をスローします。それは非serilable例外をスローします...助言してください。

答えて

1
class Dog extends Animal 
{ 
    private void writeObject(ObjectOutputStream o) 
          throws IOException, ClassNotFoundException 
    { 
     throw new NotSerializableException(); 
    } 

    private void readObject(ObjectInputStream o) 
     throws IOException, ClassNotFoundException 
    { 
     throw new NotSerializableException(); 
    } 

} 
+0

質問の存在に照らして、私は例外と例外処理を読んでお勧めします。 – trutheality

+0

ありがとう、キャッチブロックが必要なのかアドバイスしてください.. !! – Neera

+1

ここにはありません。ここで例外を投げるというのは、 'Dog'を直列化することを不可能にすることです。例外を捕捉する必要のあるオブジェクトを直列化しようとするコードです。 – trutheality