Java のインナークラス

Java で自分が作ったアプリケーションをデバッガーでデバッグしていると、いつのまにかコレクション API のクラスの中に入ってしまうことがある。しかし、コレクション関連のクラスの内部は、まるで迷路・迷宮のようだ。とにかく複雑なことこのうえない。分かりにくい理由のひとつは、インナークラスを多用していることだろうと思う。インナークラスにすると、インナークラスにしない場合に比べて、this を引数で渡さなくても良いということがメリットでもありデメリットでもある。引数がないのは、一見簡単なのだが、見えない分、逆に分かりにくい。
自分で書くコードでも、インナークラスがあると、なんとなく完成度が低いと感じてしまう。しかし、インナークラスにしないと、雑魚っぽい値オブジェクト用のクラス用に .java ファイルがたくさんできてしまい。目障りに感じる。インナークラスを使えば全部で.javaファイルが10個程度の場合、もしインナークラスを使わないと30個位に増えてしまう。しかし、これは、.java ファイルがたくさんあることが問題であって、これを理由にしてインナークラスを使うという選択は正しくないと思う。
また、インナークラスにすると javadoc に表示されなくなってしまうことが多い。もちろん、アクセス修飾を指定すればいくらでも表示はできるのだが、インナークラスにしなければ javadoc に表示されるクラスが、インナークラスにしたら表示されなくなるというのは変だ。