A note to our readers: You asked so we have developed a set of features that allow you to reduce the noise: you can get email and web notifications for topics you are interested in. Learn more about our new features.
オラクルはJavaの新バージョン - Java 10をリリースした。このリリースはJava 9リリース後たった6ヶ月で来たが、これはたった6ヶ月のライフスパンでの以前のリリースのような新しい機能リリースである。
Java 10のリリースでJava 9はすぐに旧式となりJava 9の無償で利用できるサポートリリースはもうない。3月20日現在でオラクルからの無償サポートがあるJavaバージョンはJava 8とJava 10だけだ。長期間サポートがある次のリリースはJava 11で、2018年9月にリリースされるだろう。
最終リリースはRC1版から変更がないも同然で、InfoQが2017年11月にリリース内容を最初にリポートして以降重要な機能は追加されていない。
このリリースの完全なドキュメントがある。またこのリリースでの言語レベルの変更点のリリースノートもある。
開発者にとって重大な言語機能の1つがvarの登場だ。これはJavaの型推論能力の拡張であり、最初に登場したときよりも重要になっていることを証明するものかもしれない。もっとも単純なケースとして、varは次のようなコードを可能にする。
var foo = new ArrayList<String>();
値の型から変数へ推論を展開している。
Java 10での実装はキーワードではなく予約型名でこれを達成している。これが意味することは変数やメソッド、パッケージ名にvarという名前を使うコードに影響はないということだ。
単純なケース同様、以前はできなかったプログラミング構造を実際に可能にする。たとえばjavacは型推論を非常に限定された形式でつねに許可していた。
public class Test {
public static void main(String[] args) {
(new Object() {
public void bar() {
System.out.println("bar!");
}
}).bar();
}
}
このエッジケースはJava 7が登場する以前からずっとJavaコミュニティで知られていた。
この型推論の形式での問題は現実の実践的なアプリケーションがないことだ。"barメソッドを持つObject"型はコンパイラ内には存在するが、その型は変数の型として表現することができなかった。表現可能な型ではなかったのだ。
Java 10の登場で、変数の型は明示的にする必要がなくなった。代わりにvarで型の表現を避けることで静的な型情報の保存ができるようになった。これが意味することは、先ほどの例を変更してこう書けるということだ。
var o = new Object() {
public void bar() {
System.out.println("bar!");
}
};
o.bar();
この"マジックな型"としてのvarを使うと、Javaのジェネリクスでの型の制約を少し思い出させるような方法でプログラマが型推論の個別使用ごとに型情報を保存することができる。
varのより先進的な使い方は表現可能でない型が可能となったにある。この機能はJavaの型システムへの批判をすべて満たすものではないが、 (慎重に言うと) 一定の前進を表現している。
Rate this Article
- Editor Review
- Chief Editor Action