波及効果ソルバーをPencilBoxのバージョンアップに対応させました。

2010/12/25:リンク先を変更しました

波及効果ソルバーをPencilBoxのバージョンアップに対応させました。
波及効果ソルバー(をひっつけたPencilBoxの波及効果)
中身は1.3.0に対応しただけなのでそんなに変わってはいませんが、実はソースはがらっと変わっています。


以下はjavaの話になってしまうので続きを読むで隠しておきます。


PencilBox のソースを見たところジェネリクスを用いているのですが、僕はジェネリクスはキャストを撲滅するためにあるのだと変な勘違いをしていたので、コレクションでのみ使うのはもったいないと考えてしまいました。
javaジェネリクスは理解しておきたいというのもあったので良い機会かとも思い、PencilBoxでとことんまでジェネリクスを使ってみたらどんな感じか見てみたくなり、この間作った波及効果ソルバーを実験台にソースをガリガリいじって見ることにしました。そんなわけで動作は変わってないけどソースは大きく変更。


ジェネリクスは思った以上に強力で9割ぐらいのキャストがなくせるのですが、どうしても無くせない、というか無くさない方がいいキャストもあるので、無理にジェネリクスを使ってキャストを少しでも減らすということはしないほうがよさそう。上のソースはちょっとやりすぎたと反省。程々が大事。
でも、使えるところでは積極的に使っていったほうがよさそう。
また、オーバライドしたメソッドがオーバライド元と引数や戻り値の型が違うのが当たり前になるので、注意しないといつの間にかオーバライドが外れてしまい、バグの元になってしまいますが、@Overrideアノテーションをつけると、オーバライドが外れたときにコンパイルがエラーになってくれます。これは良い仕様。今回ジェネリクスを多用してみて@Overrideアノテーションのありがたさがよくわかりました。これからは@Overrideアノテーションをつけてないと警告が出るオプションを有効にすることにします。


JavaSE5.0 で追加された仕様でライブラリ使用者はプログラムは書きやすくはなったけど、言語としては難しくなったと感じています。でもまだC++に比べたらぜんぜん簡単かな。