Effective java 3版 読書会 21日目

実施日時:2019/6/25 22:00~23:00
対象範囲:項目83~項目86
参加者:yodai、yoridori、kassyi
形式:オンライン(discord)
   課題本を事前に読み、実業務と照らし合わせて記述内容の
   議論をする。

項目83 遅延初期化を注意して使う
遅延初期化はフィールドの値が必要になるまで初期化を遅らせる。
実業務では、遅延初期化は余りやらない
Nullチェックなどやることが増えるので、まず、生成されているかをチェックする必要がある
やるとしたらシングルトンが考えらえる。
普通の初期化やコンストラクタで生成したものをフィールドにセットするやり方の方が良い。
どうしても必要なら、P333の様な二重イデオムを使う
P334は何度も初期化しても大丈夫な場合に使用する。
P333は一度のみの場合に使用する。

項目84 スレッドスケジューラに依存しない
スレッドの優先順位は最も移植性が無い
他のOSではスレッドの優先順位は守られない
a,b,cの順序だと早いからと言って順序を決定するのではなく、ボトルネックを改修する。
何かを直すためにスレッドの順序に依存するのは良くない

項目85 Javaのシリアライズよりも代替手段を選ぶ
serializableよりJsonでデータを渡した方が良い
信頼できないものをデシリアライズして使うかは疑問。
他のシステムとの結合でオブジェクトを送信して使用する可能性がある
オブジェクトの場合、メモリ破壊の可能性がある
送受信するのがデータだけのJavaのオブジェクトならOKだが、何かしらの操作するメソッドなら注意する必要がある
データを送受信するならJsonを使うようにするべき。
Beanを外のシステムとやり取りする場合はSerializableを使用する必要がある。
tomcatでHttpセッションにデータを置いておく時に必要。
サーブレットのHTTPセッションに値を詰める時は、Serializableが必要

項目86 Serializableを細心の注意を払って実装する
シリアライズのクラスを変更したら、変更前のクラスをデシリアライズして
オブジェクトを見直すことが出来ない
一旦シリアライズして保存した後、クラスを変更してデシリアライズしたら
フィールドなどが無くなっている可能性がある
トランジェントを付けて、シリアライズ対象以外のフィールド宣言する必要がある
シリアルバージョンUIDを変更する必要があるかも
シリアライズクラスを修正した場合は、後方互換性を持たせるのが良い

協力:Tech Baton
https://tech-baton.studio.design/

この記事が気に入ったらサポートをしてみませんか?