1 Java言語の変更
この項では、Java SE 9以降のリリースで更新された言語機能の概要を示します。
Java SE 20のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
switch式および文のパターン・マッチング |
このリリースでは、Java SE 17のプレビュー機能が再度プレビューされました。 このリリース:
|
JEP 433: switchのパターン・マッチング(4度目のプレビュー) |
レコード・パターン |
このリリースでは、Java SE 19のプレビュー機能が再度プレビューされました。 このリリース:
|
JEP 432: レコード・パターン(2度目のプレビュー) |
Java SE 19のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
switch式および文のパターン・マッチング |
このリリースでは、Java SE 17のプレビュー機能が再度プレビューされました。 このリリース:
|
JEP 427: switchのパターン・マッチング(3度目のプレビュー) |
レコード・パターン |
このリリースではプレビュー機能として導入されました。 レコード・パターンは、タイプ、レコード・コンポーネント・パターン・リスト(対応するレコード・コンポーネントとの照合に使用)、およびオプションの識別子で構成されます。レコード・パターンとタイプ・パターンをネストさせ、強力で宣言的、かつ構成可能なデータ・ナビゲーションと処理を実現できます。 |
JEP 405: レコード・パターン(プレビュー) |
Java SE 18のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
switch式および文のパターン・マッチング |
このリリースでは、Java SE 17のプレビュー機能が再度プレビューされました。 このリリース:
|
JEP 420: switchのパターン・マッチング(2度目のプレビュー) |
Java SE 17のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
シール・クラス |
Java SE 15で最初にプレビューされたこの機能は、このリリースで永続的になりました。つまり、プレビュー機能を有効にしなくても、Java SE 17用にコンパイルされた任意のプログラムで使用できます。 シール・クラスまたはインタフェースは、拡張または実装できるクラスまたはインタフェースを制限します。 |
JEP 409: シール・クラス |
switch式および文のパターン・マッチング |
このリリースではプレビュー機能として導入されました。
|
JEP 406: switchのパターン・マッチング(プレビュー) |
Java SE 16のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
シール・クラス |
このリリースでは、Java SE 15のプレビュー機能が再度プレビューされました。シール・タイプ階層に対する参照型の縮小変換のより厳密なチェックなど、いくつかの改良により強化されています。 シール・クラスまたはインタフェースは、拡張または実装できるクラスまたはインタフェースを制限します。 |
JEP 397: シール・クラス(2番目のプレビュー) |
レコード・クラス |
Java SE 14で最初にプレビューされたこの機能は、このリリースで永続的になりました。つまり、プレビュー機能を有効にしなくても、Java SE 16用にコンパイルされた任意のプログラムで使用できます。 このリリースでは、明示的または暗黙的に静的なメンバーを内部クラスで宣言できます。これには、暗黙的に静的なレコード・クラス・メンバーが含まれます。 レコードは、不変データの透過的なキャリアとして機能するクラスです。 |
JEP 395: レコード |
instanceofのパターン・マッチング |
Java SE 14で最初にプレビューされたこの機能は、このリリースで永続的になりました。つまり、プレビュー機能を有効にしなくても、Java SE 16用にコンパイルされた任意のプログラムで使用できます。 このリリースでは、パターン変数は暗黙的にfinalではなくなり、パターン パターン・マッチングを使用すると、プログラム内の一般的なロジック(オブジェクトからのコンポーネントの条件付き抽出)をより簡潔かつ安全に表現できます。 |
JEP 394: instanceofのパターン・マッチング |
Java SE 15のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
シール・クラス |
このリリースではプレビュー機能として導入されました。 シール・クラスまたはインタフェースは、拡張または実装できるクラスまたはインタフェースを制限します。 |
JEP 360: シール・クラス(プレビュー) |
レコード・クラス |
このリリースでは、Java SE 14のプレビュー機能が再度プレビューされました。ローカル・レコードをサポートするように拡張されました。 レコードは、不変データの透過的なキャリアとして機能するクラスです。 |
JEP 384: レコード(2度目のプレビュー) |
instanceofのパターン・マッチング |
このリリースでは、Java SE 14のプレビュー機能が再度プレビューされました。Java SE 14とこのリリースの間では変更されていません。 パターン・マッチングを使用すると、プログラム内の一般的なロジック(オブジェクトからのコンポーネントの条件付き抽出)をより簡潔かつ安全に表現できます。 |
JEP 375: instanceofのパターン・マッチング(2度目のプレビュー) |
テキスト・ブロックのプログラマーズ・ガイドも参照してください |
Java SE 13で最初にプレビューされたこの機能は、このリリースで永続的になりました。つまり、プレビュー機能を有効にしなくても、Java SE 15用にコンパイルされた任意のプログラムで使用できます。 テキスト・ブロックは、大部分のエスケープ・シーケンスの必要性を回避し、文字列を予測可能な方法で自動的に書式設定する複数行の文字列リテラルであり、必要に応じて開発者が書式を制御できます。 |
JEP 378: テキスト・ブロック |
Java SE 14のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
instanceof演算子のパターン・マッチング |
このリリースではプレビュー機能として導入されました。 パターン・マッチングを使用すると、プログラム内の一般的なロジック(オブジェクトからのコンポーネントの条件付き抽出)をより簡潔かつ安全に表現できます。 |
JEP 305: instanceofのパターン・マッチング(プレビュー)JEP 305: instanceofのパターン・マッチング(プレビュー) |
レコード |
このリリースではプレビュー機能として導入されました。 レコードは、様々な不変データに対して透過的なホルダーであるクラスを宣言するためのコンパクトな構文を提供します。 |
JEP 359: レコード(プレビュー) |
テキスト・ブロックのプログラマーズ・ガイドも参照してください |
このリリースでは、Java SE 13のプレビュー機能が再度プレビューされました。より多くのエスケープ・シーケンスがサポートされるように拡張されました。 テキスト・ブロックは、大部分のエスケープ・シーケンスの必要性を回避し、文字列を予測可能な方法で自動的に書式設定する複数行の文字列リテラルであり、必要に応じて開発者が書式を制御できます。 |
JEP 375: instanceofのパターン・マッチング(2度目のプレビュー) |
switch式 |
Java SE 12で最初にプレビューされたこの機能は、このリリースで永続的になりました。つまり、プレビュー機能を有効にしなくても、Java SE 14用にコンパイルされた任意のプログラムで使用できます。 この機能により |
JEP 361: switch式(標準) |
Java SE 13のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
テキスト・ブロック。テキスト・ブロックのプログラマーズ・ガイドを参照してください。 |
このリリースではプレビュー機能として導入されました。 テキスト・ブロックは、大部分のエスケープ・シーケンスの必要性を回避し、文字列を予測可能な方法で自動的に書式設定する複数行の文字列リテラルであり、必要に応じて開発者が書式を制御できます。 |
JEP 355: テキスト・ブロック(プレビュー) |
switch式 |
このリリースでは、Java SE 12のプレビュー機能が再度プレビューされました。次の1つが変更されて拡張されました: この機能により |
JEP 354: switch式(2度目のプレビュー) |
Java SE 12のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
switch式 |
このリリースではプレビュー機能として導入されました。 この機能により |
JEP 325: switch式(プレビュー) |
Java SE 11のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
ローカル変数の型推論: スタイル・ガイドラインも参照してください。 |
Java SE 10で導入されました。このリリースでは、暗黙的に型指定されるラムダ式の仮パラメータを宣言するときに ローカル変数の型推論は、初期化子を伴うローカル変数宣言に型推論を拡張します。 |
Java SE 10のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
ローカル変数の型推論: スタイル・ガイドラインも参照してください。 |
このリリースで導入されました。 ローカル変数の型推論は、初期化子を伴うローカル変数宣言に型推論を拡張します。 |
JEP 286: ローカル変数の型推論 |
Java SE 9のJava言語の変更
機能 | 説明 | JEP |
---|---|---|
Javaプラットフォーム・モジュール・システム。OpenJDKのProject Jigsawを参照してください。 |
このリリースで導入されました。 Java Platformモジュール・システムでは、モジュールという新しい種類のJavaプログラミング・コンポーネントが導入されています。モジュールは名前付きで自己記述型のコードとデータのコレクションです。タイプ(Javaのクラスとインタフェース)を含むパッケージのセットとしてコードが編成されており、リソースおよび他の種類の静的情報がデータに含まれます。モジュールはパッケージをエクスポートまたはカプセル化でき、他のモジュールに対する依存関係を明示的に表現できます。 |
|
言語の小さな機能拡張(Project Coin): |
Java SE 7では、Project Coinとして導入されました。これはいくつかの修正で拡張されています。 |
さらに簡潔になったtry-with-resources文
final
としてのリソースがすでにあるか、実質的にfinal
の変数がある場合、新しい変数を宣言せずにその変数をtry-with-resources
文で使用できます。「事実上final」の変数とは、初期化された後に値が変更されることがない変数のことです。
たとえば、次の2つのリソースを宣言したとします。
// A final resource
final Resource resource1 = new Resource("resource1");
// An effectively final resource
Resource resource2 = new Resource("resource2");
Java SE 7または8では、次のように新しい変数を宣言します。
try (Resource r1 = resource1;
Resource r2 = resource2) {
...
}
Java SE 9では、r1
およびr2
を宣言する必要はありません。
// New and improved try-with-resources statement in Java SE 9
try (resource1;
resource2) {
...
}
the try-with-resources文の詳細な説明は、Javaチュートリアル(Java SE 8以前)を参照してください。
プライベート・インスタンス・メソッドで許可される@SafeVarargsの注釈
@SafeVarargs
の注釈がプライベート・インスタンス・メソッドで許可されます。これは、オーバーライドできないメソッドのみに適用できます。これらには、静的メソッド、finalインスタンスのメソッド、およびプライベート・インスタンスのメソッド(Java SE 9の新機能)が含まれます。