Effective java 3版 読書会 22日目(最終)
実施日時:2019/7/4 22:00~23:00
対象範囲:項目87~項目90
参加者:yodai、yoridori、kassyi
形式:オンライン(discord)
課題本を事前に読み、実業務と照らし合わせて記述内容の
議論をする。
項目87 カスタムシリアライズ形式の使用を検討する
デフォルトのシリアライズとは、フィールドにtransient宣言せず、そのままシリアライズするもの
transientと宣言できるフィールドは全てtransientとするべき
オブジェクトでデシリアライズするときに再構築するべき
P334シンプルな値だけを持っているクラスならばデフォルトのシリアライズでOK
P345のネストしている様なクラスや処理をしているクラスではそのままではいけない
シリアライズ可能なクラスでは、シリアルバージョンUIDを宣言する
オブジェクトの全体を読み出すメソッドは、synchronizedを宣言する
項目88 防御的にreadObjectメソッドを書く
readObjectした場合は、ちゃんとチェックが必要
readObjectとはインスタンスを生成する様なもの
作成されたインスタンスはちゃんとチェックするべき
ファイルが壊れているかなどをチェックする
防御的コピーを実施する
項目89 インスタンス制御に対しては、readResolveよりenum型を選ぶ
transitionを定義して、readResolveで本来持っていたインスタンスを返す
シングルトンの時、インスタンス制御を行う場合はenum型を使うべき
readResolveを使用する場合、参照型のインスタンスフィールドはtransient
宣言する
項目90 シリアライズされたインスタンスの代わりに、シリアライズ・プロキシを検討する
シリアライズプロキシパターンを使用する
シリアライズプロキシパターンでは若干遅くなる
ネストクラスやユーザー側が拡張できると互換性が無くなる
協力:Tech Baton
https://tech-baton.studio.design/