Java プログラミング言語の拡張機能
- バイナリリテラル -
Java SE 7 では、整数型 (
byte
、short
、int
、および long
) を 2 進法で表現することもできます。バイナリリテラルを指定するには、数値に接頭辞 0b
または 0B
を付加します。
- 数値リテラル内の下線 -
数値リテラルの桁の間のどこにでも、任意の数の下線文字 (
_
) を含めることができます。この機能を使用すると、たとえば数値リテラルの桁の集まりを分離することで、コードの可読性を向上させることができます。
- switch 文内の文字列 -
switch
文の式に String
クラスを使用できます。
- ジェネリックインスタンス作成のための型推定 -
ジェネリッククラスのコンストラクタの呼び出しに必要な型引数は、コンパイラがコンテキストから型引数を推定できる場合にかぎり、型パラメータの空のセット (
<>
) で置き換えることができます。この山括弧のペアは、非公式にダイヤモンドと呼ばれています。
- 非具象化可能仮パラメータを可変長引数メソッドに使用する場合のコンパイラの警告とエラーの改善 -
Java SE 7 のコンパイラは、非具象化可能可変長引数仮パラメータを持つ可変長引数のメソッドまたはコンストラクタの宣言箇所で警告を生成します。Java SE 7 では、このような警告を抑制するために、コンパイラオプション
-Xlint:varargs
および注釈 @SafeVarargs
と @SuppressWarnings({"unchecked", "varargs"})
が導入されています。
- try-with-resources 文 -
try
-with-resources 文は、1 つ以上のリソースを宣言する try
文です。リソースは、プログラムでの使用が終わったら閉じられなければならないオブジェクトです。try
-with-resources 文は、文の終わりで各リソースが確実に閉じられるようにします。新しい java.lang.AutoCloseable
インタフェースまたは java.io.Closeable
インタフェースを実装しているオブジェクトは、リソースとして使用できます。クラス java.io.InputStream
、OutputStream
、Reader
、Writer
、java.sql.Connection
、Statement
、および ResultSet
は、AutoCloseable
インタフェースを実装するように改良され、すべて try
-with-resources 文でリソースとして使用できるようになりました。
- 複数の例外タイプのキャッチと向上した型チェックによる例外の再スロー -
単一の
catch
ブロックで複数の例外タイプを処理できます。また、コンパイラでは、再スローされる例外について以前のリリースの Java SE よりも正確な分析が実行されます。これにより、メソッド宣言の throws
節に、より具体的な例外型を指定できます。
Java SE 6 では言語に対する変更は導入されませんでした。
- ジェネリクス - 長い間待たれていた型システムの機能拡張です。型またはメソッドで、コンパイル時の型保証を備えながら、さまざまな型のオブジェクトで操作できます。コンパイル時の型保証が Collections Framework に追加され、キャスト操作の煩雑さをなくしました。「The Java Tutorial」の「Generics」レッスンを参照してください。(JSR 14)
- 拡張された
for
ループ - この新しい言語構造体により、コレクションや配列を反復する際の、イテレータおよびインデックス変数の煩雑さやエラー発生の可能性がなくなりました。(JSR 201)
- Autoboxing/Unboxing - この機能により、プリミティブ型 (int など) とラッパー型 (Integer など) の間の手動変換の煩雑さをなくしました。(JSR 201)
- 型保証された列挙 - この柔軟なオブジェクト指向の列挙型では、任意のメソッドやフィールドを持つ列挙型を作成できます。煩雑さやエラー発生の可能性なしで、Typesafe Enum パターン (「Effective Java」第 21 項) のすべての利点を実現しています。(JSR 201)
- 可変長引数 - この機能では、可変長の引数リストを許可するメソッドを呼び出すときに、手動で引数リストを配列に閉じ込める必要がありません。
- static インポート - この機能では、static メンバーをクラス名で修飾する必要がなく、「Constant Interface Antipattern」の欠点もありません。(JSR 201)
- 注釈 (メタデータ) - この言語機能を使用すると、多くの場合にボイラープレートコードを記述する必要がありません。ボイラープレートコードは、ソースコードの注釈からツールを使用して生成されます。これにより、プログラマが何をしなければならないか、という「宣言型の」プログラミング方法が実現され、そのコードはツールが生成します。また、ソースファイルの変更に合わせて最新の状態にしておかなければならない「付属ファイル」を保守する必要がありません。その代わりに、必要な情報はソースファイル内で保守します。(JSR 175)
注: @Deprecated
注釈を使用すると、プログラムの要素を非推奨にできます。「いつ、どのように API を非推奨とするか」を参照してください。
ジェネリクスに関する情報
- アサーション機能 - アサーションは、プログラマがコンピュータプログラムの特定の状態を検証するための boolean 式です。たとえば、リストをソートしたあとに、プログラマはそのリストが昇順であることを表明します。実行時にアサーションを評価して妥当性を確認する方法は、コードの品質を向上させるもっとも強力な方法の 1 つで、プログラムの動作に関するプログラマの誤解をただちに検出できます。