このサイトの外部化に関する記事を読んでいて、外部化セクションの制限で次の段落を見つけました。
ご存じのように、Externalizable インターフェイスを実装するオブジェクトをシリアル化するときに、デフォルトの public no-arg コンストラクターが呼び出されます。したがって、Java の内部クラスのすべてのコンストラクターは、外側のクラスのインスタンスを先頭に追加されたパラメーターとして常に受け入れるため、Java の内部クラスによって Externalizable インターフェイスを実装することはできません。したがって、引数のないコンストラクターを使用することはできません内部クラス。内部クラスは、Serializable インターフェイスを実装するだけで、オブジェクトのシリアル化を実現できます。
これをテストしたところ、これは有効ではないことがわかりました。内部クラスは引数コンストラクターを持つことができず、Externalizable
インターフェイスを実装することもできます。ローカルクラスでも試してみました。正常に動作します。
public class ExternalizeDemo {
class InnerClass implements Externalizable{
public InnerClass() {
//default no-arg inner class constructor
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
//logic to save object state
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
//logic to retrieve object state
}
}
public void localClassTest(){
class LocalClass implements Externalizable{
public LocalClass(){
//default no-arg local class constructor
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
//logic to save object state
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
//logic to retrieve object state
}
}
}
}
したがって、いくつかの点が欠けているか、記事の段落が無効になっています (私は Java 7 を使用しています)。それで、それはどれですか。どんな提案でも大歓迎です。