methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

Javaの罠

僕はもともとC++やってて、Javaは結城さんのデザパタ入門本で覚えた。
Javaがなんとなく判るようになってからは、「Javaではこれはどうするんだろう?」と思うことがよくある。

たとえば、immutableパターンを理解するまで、constが無いのが不満だった。

class Hoge{
   private myName;

   // myNameは防御的コピーをしなくても大丈夫
   public Hoge( String name ){ myName = name; }

   // こっちも
   public String getName() { return myName; }
}

でも、immutableパターンなClassは、高速性と引き換えにいろいろなものを失う。

クラスに属さない関数の定義ができないことに対して、2項演算と継承を共存させるにはどうするのか判らなかった。これはEffective Javaで、「できない」といわれるまで、できないのは自分のせいだと思っていた。(C++なら、静的な型でどのオーバーロードが使われるかが決定されるから、もっと柔軟に対応できる)

Javaは、C++より機能が少なくて覚えやすいけど、JavaになくてC++にある機能はそれなりの合理性に基づいている機能だと思った。それだけ。