今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

今日の発見 via swat_memo

内部クラスに対してClass#newInstance()を呼んではいけないのであった。

単純な話、Class#newInstance()する必要があるんなら内部クラスにしちゃいかんと思う。内部クラスにするって場合は、内部クラスにする意図が明確じゃなきゃいかんのだ。
コードを書いていると新しくクラスを作る必要があることに気がついたとする。そのクラス内でしか使わないつもりで内部クラスを作る。そういうことはよくある。そのクラス内でしか使わないのだから、内部クラスにする意図は明確だ。
その後、同一パッケージ内の他のクラスで使いたくなったときは、リファクタリングのタイミングだと思った方がいい。内部クラスを package private なクラスとして切り出す。(public にしないところがミソ)
個人的な話だが、内部クラスだと Javadoc 用のコメントは手抜きがちだ。それは、そのクラス内でしかアクセスしないという制約を前提としているから、手抜きしていいことにしている。しかし、package private にすると他のクラスからもアクセスできるので、内部クラスから切り出したときは、Javadoc 用のコメントを書き足すことにしている。少しは書いておかないと自分でも忘れてしまうのよね。。。