MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Effective Javaを読んで心に響いたこと


Effective Java 第3版

目次

はじめに

Effective * を読んで心に響いたシリーズのEffective Java編です。

myenigma.hatenablog.com

myenigma.hatenablog.com

Javaの中級を目指す人にはおすすめの一冊でした。

入門は下記を参照ください。

myenigma.hatenablog.com

コンストラクタの代わりにstaticファクトリメソッドを検討する。

キーワード引数もなく、JuliaのようにMultiple dispatchではないJavaのコンストラクタは

昔から使いづらいなと思ってたので、自分もファクトリメソッドの方が好きです。

 

あるクラスの引数が多かったり、オプション設定などがある場合は、builderパターンを使う

これが一番感動しました。

キーワード引数がないJavaでは複雑なインスタンスをつくるには、

この方法がいいと思います。

実装方法は下記を参照ください。

qiita.com

qiita.com

 

全ての関数の引数はチェックをし、publicな関数はException を投げ、privateなものはAssertionを使う。

ExceptionとAssertionの使い分けをたまに悩むのですが、

publicなものにはExceptionにし、ドキュメント化し、

privateなものにはデバックを用意にするためにAssertionを使うというのはいいと思いました。

Assertionであれば、最終版では無効化し、パフォーマンスにも影響でないですし。

Javaでは、java -eaとオプションをつけるとAssersionがオンになります。

 

絶対に来ない所では、AsserttionErrorを投げる

assert False

でもいいですが、

throw new AssertionError("Opps");

のほうが、メッセージがかけていいなと思いました。

 

nullチェックにはObjects.requireNonNullを使う

Java 7で追加されたObjects.requireNonNullメソッドは、Null検査に便利です。

saiya-moebius.hatenablog.com

 

Dateは使わないようにする

java8以前では、日時のクラスにjava.util.Dateを使っていましたが、

そもそもイミュータブルではないなど、色々問題がありました。

そこでjava8からは、新しいjava.time.*を使うことが推奨されています。

詳細はこちら:

qiita.com

 

参照型を引数で受け取る時は防御的にコピーしてフィールドにする

参照型をそのままフィールドで持っていると、外部から変更されて影響を受ける可能性があるので、

newをして防御的にコピーして保持する方法を学びました。

 

クラスがpublicでなければ、アクセッサはいらない。

自分しか使わないのであれば、そうですよね。

 

try-finallyよりもtry-with-resourcesを選ぶ

Pythonのwithを使ったコンテキストマネージャと同じ感じですね。

便利そうです。

Python のコンテキストマネージャと with ブロック - Python の基本 - Python 入門

 

ネストクラスはインスタンス化が不要であればstaticにしておく。

ネストクラスをうまく使えていなかったので、かなり勉強になりました。

こちらに書かれている通り、できるだけstaticネストクラスを使ったほうが良いようです。

qiita.com

java.keicode.com

 

参考資料

qiita.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com


Effective Java 第3版

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com