// 
//     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"]
--


[start=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"]
--


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

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


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


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

image::images/output.png[]


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

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


[start=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();
            }
        }
    }
}
 
----

[start=2]
. このチュートリアルの上に示すように、コードをJDK 7仕様向けに最適化する方法を示す複数のヒントがIDEに表示されます。単純に各ヒントをクリックし、提案されたアクションを選択します。

[start=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プロジェクトの作成+]
