NetBeans IDEでのJDK 7サポートの概要

This tutorial needs a review. You can open a JIRA issue, or edit it in GitHub following these contribution guidelines.

NetBeans IDEでは、ダイヤモンド演算子、switch内の文字列、マルチ・キャッチなどの、Java 7言語機能がサポートされています。これらの構造をコード内で使用すると、IDEはそれを認識してコード補完で正しいクラスを提供し、エラーを正しく強調表示して、構文を自動的に修正できるようにします。このように、NetBeans IDEは、ユーザーがJava言語仕様、Java SE 7 Editionと互換性のあるコードを記述するのに役立ちます。

このチュートリアルでは、Java 7言語構造がIDEでどのように処理されるかについて学習します。

netbeans stamp 80 74
Figure 1. このページの内容は、NetBeans IDE 7.4および8.0に適用されます

このチュートリアルを完了するには、次の表に示すソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン

NetBeans IDE

バージョン7.4または8.0

Java Development Kit (JDK)

バージョン7または8

NetBeans IDEでのJDK 7の登録の確認

NetBeans IDEでJDK 7が登録されていることを確認するには:

  1. IDEで、メイン・メニューから「ツール」>「Javaプラットフォーム」を選択します。

  2. 「Javaプラットフォーム・マネージャ」ダイアログ・ボックスの「プラットフォーム」リストで、JDK 1.7が選択されていることを確認します。

platform small
  1. 「閉じる」をクリックします。

プロジェクト構成の確認

登録されたJDKをコンパイル、実行およびデバッグに使用するようにプロジェクトが構成されているか確認するには:

  1. 「ファイル」>「新規プロジェクト」を選択し、プロジェクト・タイプとして「Javaアプリケーション」を選択することでJavaプロジェクトを作成します。

  2. 「次」をクリックします。

  3. プロジェクト名として「 SwitchTest 」と入力し、その場所を指定します。

  4. 「終了」をクリックします。

  5. 「プロジェクト」ウィンドウで、「 SwitchTest 」プロジェクトのノードを右クリックし、「プロパティ」>「ライブラリ」を選択します。このタブで、「Javaプラットフォーム」リストで「JDK 1.7」が選択されていることを確認します。

props libs small
  1. 「プロジェクト・プロパティ」ウィンドウの「ソース」タブに切り替え、「ソース/バイナリ形式」として「JDK 7」が選択されていることを確認します。

props sources small
  1. 「OK」をクリックして、「プロジェクト・プロパティ」ダイアログ・ボックスを閉じます。プロジェクトが、Java 7言語機能を認識するように構成されています。

新しいJDK 7言語構造の使用: switch文

JDK 7では、国際化、I/Oやネットワーキング、セキュリティなどを含む様々な領域で、多くの新機能および拡張機能が導入されています。IDEのJavaエディタによるJDK 7サポートを示すための最善の方法は、Project Coinによって導入されたいくつかの言語変更を示すことです。

これらの変更の1つが「switch内のString」です。以前のバージョンのJavaでは、 switch の引数は、基本データ型である byteshortcharintenum のいずれかのみが許可されていました。JDK 7からは、 switch 文の式に型 String の引数を使用できます。

  1. SwitchTest.java を開き、次のコードを追加します。この小さなサンプルは、いくつかの色のRGBコードを表示します。 JDK 7では、 color 変数を String にすることができます。

package switchtest;

    public class SwitchTest {

    public static void main(String[] args) {

        String color = "red";
        String colorRGB;
        switch (color.toLowerCase()) {
            case "black": colorRGB = "000000"; break;
            case "red": colorRGB = "ff0000"; break;
            case "green": colorRGB = "008000"; break;
            case "blue": colorRGB = "0000ff"; break;
            default: colorRGB = "Invalid color"; break;
        }
        System.out.println(colorRGB);
        }
    }

貼り付けたコードがエディタで誤ってフォーマットされている場合は、[Alt]-[Shift]-[F]を押して再フォーマットします。

  1. 「プロジェクト」ウィンドウでプロジェクトのノードを右クリックし、「ファイルの実行」を選択します。アプリケーションの出力(赤色のRGBコード)が表示されます。 ターゲット・プラットフォームとソース形式がJDK 7である場合は、ビルドが成功し、アプリケーションが正常に動作することがわかります。

output
  1. 前に戻ってJDK 6を使用し、このアプリケーションがJDK 6コンパイラでどのようにコンパイルされるかをテストしてみます。 「プロジェクト」ウィンドウでプロジェクトのノードを右クリックし、「プロパティ」を選択します。「ソース」カテゴリで、「ソース/バイナリ形式」を JDK 6 に設定して「OK」をクリックします。 JDK6パーサーでこの構文が認識されないことがただちにわかります。互換性のない変数型のためにコンパイルが失敗します。

error small
  1. ここで、次のように、 switch のかわりに if-then-else 文を使用してコードを書き換えてみます。

package switchtest;

    public class SwitchTest {

    public static void main(String[] args) {

        String color = "red";
        String colorRGB;
        if (color.equals("black")) {
            colorRGB = "000000";
        } else if (color.equals("red")) {
            colorRGB = "ff0000";
        } else if (color.equals("green")) {
            colorRGB = "008000";
        } else if (color.equals("blue")) {
            colorRGB = "0000ff";
        } else {
            colorRGB = "Invalid color";
        }
        System.out.println(colorRGB);
        }
    }

JDK 7がソース/バイナリ形式であるため、次の図に示すように、IDEはこのようなケースを認識し、この文を switch 文に変換するよう提案します。

convert small

このヒントをクリックすると、 if-then-else 構造が、先のコードとまったく同じ switch に自動的に変換されます。

JDK 7サポート: その他の例

IDEのJavaエディタがコードをどのように認識し、JDK 7言語仕様に準拠するようにどのように自動的に修正するかを示すために、ここでは、言語の主な機能強化がすべて含まれたダミーのコード・スニペットを使用します。

このダミーのコード・スニペットを調べ、エディタのヒントを適用すると、次を行う方法の例がわかります。

  • 型を明示的に指定しなくてもJavaコンパイラが汎用インスタンスの型を推論できる場合は、自動的な型推論を利用します。型推論のケースにフラグを付けるために、いわゆる_ダイヤモンド演算子_が使用されます。

  • 複数の種類の例外に対して1つの catch ブロックを使用できる場合は、機能強化された例外処理、つまり_マルチ・キャッチ_を使用します。

  • 自動リソース管理機能によって導入された、リソース・クロージャ文の新しい構文を使用します。

    1. 同じ SwitchTest.java ファイル内の前のアプリケーション・コードを次のコードに置き換えます。

package switchtest;


import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class SwitchTest {

    public void test() throws IOException {
        List<String> list = new ArrayList<String>();
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        HashMap<String, Integer> map2 = new HashMap<String, Integer>();
        String a = "ehlo";

        try {
            Method m = Object.class.getMethod("toString");
            m.invoke(this);
        } catch(NoSuchMethodException e) {
            e.printStackTrace();
        } catch(InvocationTargetException e) {
            e.printStackTrace();
        } catch(IllegalAccessException e) {
            e.printStackTrace();
        }

        FileInputStream in = null;
        try {
            in = new FileInputStream("foo.txt");

            int k;
            while ((k = in.read()) != -1) {
                System.out.write(k);
            }
        } finally {
            if (in != null) {
                in.close();
            }
        }
    }
}
  1. このチュートリアルの上に示すように、コードをJDK 7仕様向けに最適化する方法を示す複数のヒントがIDEに表示されます。単純に各ヒントをクリックし、提案されたアクションを選択します。

  2. 最終的に、すべての提案を受け入れると、次に示すJDK 7と互換性のあるコードが得られるはずです。

converted small

link:/about/contact_form.html?to=3&subject=Feedback: Overview of JDK 7 Support in NetBeans IDE[このチュートリアルに関するご意見をお寄せください]

関連項目

JDK 7とNetBeans IDEの詳細は、次のドキュメントを参照してください。

NetBeans IDEでのJavaアプリケーションの開発の詳細は、次を参照してください。