// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= NetBeans IDEでのJDK 7サポートの概要
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans IDEでのJDK 7サポートの概要 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDEでのJDK 7サポートの概要

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

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


image::images/netbeans-stamp-80-74.png[title="このページの内容は、NetBeans IDE 7.4および8.0に適用されます"]


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

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

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |バージョン7.4または8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java Development Kit (JDK)+] |バージョン7または8 
|===


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

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

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

[.feature]
--
image::images/platform-small.png[role="left", link="images/platform.png"]
--

3. 「閉じる」をクリックします。


== プロジェクト構成の確認

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

1. 「ファイル」>「新規プロジェクト」を選択し、プロジェクト・タイプとして「Javaアプリケーション」を選択することでJavaプロジェクトを作成します。
2. 「次」をクリックします。
3. プロジェクト名として「 ``SwitchTest`` 」と入力し、その場所を指定します。
4. 「終了」をクリックします。
5. 「プロジェクト」ウィンドウで、「 ``SwitchTest`` 」プロジェクトのノードを右クリックし、「プロパティ」>「ライブラリ」を選択します。このタブで、「Javaプラットフォーム」リストで「JDK 1.7」が選択されていることを確認します。

[.feature]
--
image::images/props-libs-small.png[role="left", link="images/props-libs.png"]
--

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

[.feature]
--
image::images/props-sources-small.png[role="left", link="images/props-sources.png"]
--

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


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

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

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

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

[source,java]
----

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]を押して再フォーマットします。

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

image::images/output.png[]

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

[.feature]
--
image::images/error-small.png[role="left", link="images/error.png"]
--

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

[source,java]
----

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`` 文に変換するよう提案します。

[.feature]
--
image::images/convert-small.png[role="left", link="images/convert.png"]
--

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


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

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

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

* 型を明示的に指定しなくてもJavaコンパイラが汎用インスタンスの型を推論できる場合は、自動的な型推論を利用します。型推論のケースにフラグを付けるために、いわゆる_ダイヤモンド演算子_が使用されます。
* 複数の種類の例外に対して1つの ``catch`` ブロックを使用できる場合は、機能強化された例外処理、つまり_マルチ・キャッチ_を使用します。
* 自動リソース管理機能によって導入された、リソース・クロージャ文の新しい構文を使用します。

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

[source,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();
            }
        }
    }
}
 
----
2. このチュートリアルの上に示すように、コードをJDK 7仕様向けに最適化する方法を示す複数のヒントがIDEに表示されます。単純に各ヒントをクリックし、提案されたアクションを選択します。
3. 最終的に、すべての提案を受け入れると、次に示すJDK 7と互換性のあるコードが得られるはずです。

[.feature]
--
image::images/converted-small.png[role="left", link="images/converted.png"]
--

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



== 関連項目

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

* _NetBeans IDEによるアプリケーションの開発_のlink:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG465[+ターゲットJDKの設定+]
* link:http://download.oracle.com/javase/tutorial/essential/io/fileio.html[+Javaチュートリアル: ファイル入出力+] - 入出力におけるJDK 7の変更の多数の例を含む、Javaチュートリアル内の項。
* link:http://download.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html[+Javaチュートリアル: forkとjoin+] - JDK7での新しいfork/joinフレームワークの説明。

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

* link:javase-intro.html[+一般的なJavaアプリケーション開発+]
* link:../../trails/java-se.html[+一般的なJava開発の学習+]
* _NetBeans IDEによるアプリケーションの開発_のlink:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG366[+Javaプロジェクトの作成+]
