readOldVersion メソッドの例
このメソッドは、下位互換性をサポートするために readVersion <EXTERBALIZATION_VERSION_UID> とほぼ同様に生成されます。複数のリリースの下位互換性をサポートするには、このメソッドにサポート対象の古いバージョンごとに条件付きブロックを含める必要があります。各条件は、クラスの該当バージョンで使用されたバージョン UID をチェックし、フィールドを読み取るブロックは、該当バージョンで使用された読み取り呼び出しと同じ組み合わせにします。生成された OLD_FORMAT_VERSION_UID 定数は、このクラスの R4 インスタンスでのみ有効です。存在しなくなったフィールドは、読み取りまたは破棄できます (割り当てはできません)。対象バージョンに存在しないフィールドは、オブジェクトを有効な状態にするために必要な方法と同じ方法で初期化できます。
private boolean readOldVersion( ObjectInput input,
long readSerialVersionUID, boolean passThrough, boolean superDone )
throws IOException, ClassNotFoundException {
//##begin readOldVersion%readOldVersion.body preserve=no
boolean success = true;
// handle previous version
if ( readSerialVersionUID == OLD_FORMAT_VERSION_UID ) {
a1 = (String)input.readObject();
a2 = (Date)input.readObject();
a3 = (Xyz)input.readObject();
list = (Vector)input.readObject();
String size_string_value = (String)input.readObject();
try { size = (MySize)wt.fc.EnumeratedType.toEnumeratedType(
size_string_value ); }
// in case it was old format
catch( wt.util.WTInvalidParameterException e ) {
size = MySize.toMySize( size_string_value );
}

theOneMoreReference = (ObjectReference)input.readObject();
timeline = (Timeline)input.readObject();
work = (MyAddress)input.readObject();
}
else if ( !superDone ) {
success = super.readVersion( this, input,
readSerialVersionUID, false, false ); // reformatted stream-
if ( success &amp;&amp; !passThrough &amp;&amp; // forced pass through to
skip me
// I have been inserted into hierarchy
readSerialVersionUID != super.EXTERNALIZATION_VERSION_UID )
// try mine again
readVersion( this, input, input.readLong(), false, true );
}
else
throw new java.io.InvalidClassException( CLASSNAME,
"Local class not compatible:"
+ " stream classdesc externalizationVersionUID=
" + readSerialVersionUID
+ " local class externalizationVersionUID=
" + EXTERNALIZATION_VERSION_UID );
return success;
//##end readOldVersion%readOldVersion.body
}
これは役に立ちましたか?