Javaコミュニティは、Java7にtype inferenceを追加するというテーマについて、この数週間、討論している。Remi Forax氏は、2つの一般的な提案に対するjavacの変更に関して、ブログに詳しく書いている。一つは、James Goslingが、宣言であることを識別するための「:=」というシンタックスを使用していることからAlgolというニックネームがつけられたもので、以下のように記述する。
s := "String";
2つ目は、Peter Ahe氏とChristian Piesner Hansen氏が考えた、finalキーワードを使用するというものである。
final s = "String";
両方の提案とも、finalのローカル変数を作るという側面を持っている。多くの開発者は、そのような機能に対して意見を言っている。
実際、Type inferenceは、JavaScriptやPHPのような言語においては理にかなっており、一番初めにあがる特徴でもあります。それに対し、Javaのような言語においては、理にあわないことがあります。Javaは、弱い型づけ言語になっているかのように見えますが、そうではありません。実際は、どちらかと言えば、さらに強い型づけ言語になっています。例をあげれば、Mapの変数を、単にMapとしてではなく、HashMapやTreeMapとしなければなりません。それは、Java言語にそういった新しい機能が利用できないということなのです。私は、その機能が良くないと言っている訳ではなく、もはや、言語にフィットしていないと言っているのです。Javaは、既に、肥大化しすぎています。私は、type inference、クロージャーについて、コンパイラがファクトリメソッドを作り、その他の提案は全て良くないといった、一般論を言っているのではありません。そうではないのです。私は、単に、それらは現在の言語仕様のコア部分にフィットしておらず、より悪い言語仕様の追加になると言っているのです。
そのような議論が、Java 7が現在の形を維持するべきか、type inferenceやクロージャーのように言語構造を追加するのかといった問題を盛り上げているのだ。
(原文は2007年4月17日にリリースされた記事です)