// 
//     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 8 支持概述
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans IDE 中的 JDK 8 支持概述 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDE 中的 JDK 8 支持概述

作者：Tomas Zezula 和 Alyona Stashkova

NetBeans IDE 支持 link:http://openjdk.java.net/projects/jdk8/features/[+JDK 8 功能+]，例如 lambda 表达式、可重复标注、精简配置文件等。在代码中使用这些结构时，IDE 会识别它们，正确突出显示错误并使您能够自动修复语法。因此，NetBeans IDE 可帮助您编写与 link:http://download.oracle.com/otndocs/jcp/java_se-8-edr-spec/index.html[+Java SE 8 发布内容早期草稿审查规范+]兼容的代码。

在本教程中，您将了解如何在 NetBeans IDE 中开始使用 JDK 8，以及如何使用 IDE 对精简配置文件、lambda 表达式和重复标注等 Java SE 8 功能的支持。


image::images/netbeans-stamp-80-74.png[title="此页上的内容适用于 NetBeans IDE 7.4 和 8.0 Beta"]


*要学完本教程，您需要具备下表所列的软件和资源。*

|===
|软件或资源 |要求的版本 

|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 开发工具包 (JDK)+] |版本 8 
|===


== 在 NetBeans IDE 中启用 JDK 8 支持

在系统上下载并安装 JDK 8 之后，需要将其注册在 IDE 中，如下所示：

1. 在 IDE 中，从主菜单中选择 "Tools"（工具）> "Java Platforms"（Java 平台）。
2. 在 "Java Platform Manager"（Java 平台管理器）对话框中单击 "Add Platform"（添加平台）。
3. 在 "Add Java Platform"（添加 Java 平台）对话框中，选择 "Java Standard Edition"，然后单击 "Next"（下一步）。
4. 指定包含 JDK 的目录，然后单击 "Next"（下一步）。

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


[start=5]
. 验证平台源 zip 文件和 API 文档的默认位置是否有效。单击 "Finish"（完成）以关闭 "Add Java Platform"（添加 Java 平台）对话框。
JDK 8 作为平台注册在 IDE 中。

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


[start=6]
. 确保在 "Platforms"（平台）列表中选择了 JDK 1.8，然后单击 "Close"（关闭）。


== 配置项目以使用 JDK 8

在 IDE 中注册 JDK 8 之后，需要将项目配置为使用 JDK 8 进行编译、运行和调试。

首先，我们将使用 NetBeans IDE 附带的 Anagram Game 示例创建一个新的 Java SE 项目。

1. 在 IDE 中，选择 "File"（文件）> "New Project"（新建项目）。
2. 在 "New Project"（新建项目）向导中，展开 "Samples"（样例）类别并选择 "Java"。
3. 在 "Projects"（项目）列表中选择 "Anagram Game"。然后，单击 "Next"（下一步）。
4. 在 "Name and Location"（名称和位置）面板中，保留 "Project Name"（项目名称）和 "Project Location"（项目位置）字段的默认值。
5. 单击 "Finish"（完成）。
IDE 将在 "Projects"（项目）窗口中创建并打开 Java SE 项目。

*要配置项目以使用 JDK 8，请执行以下操作：*

1. 在 "Projects"（项目）窗口中右键单击 "AnagramGame" 项目，然后从上下文菜单中选择 "Properties"（属性）。
2. 在 "Project Properties"（项目属性）对话框中，选择 "Libraries"（库）类别，然后将 JDK 1.8 设置为 Java 平台。

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


[start=3]
. 选择 "Sources"（源）类别，然后将源代码/二进制格式设置为 "JDK 8"。

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


[start=4]
. 单击“确定”保存更改。
此时将设置项目以识别新的 JDK 8 语言功能。


== 使用精简配置文件支持

Java SE 8 引入了可用于部署和运行不需要整个平台的应用程序的 link:http://openjdk.java.net/jeps/161[+Java SE 平台规范的子集配置文件+]。

到目前为止已定义的三个配置文件名为 _compact1_、_compact2_ 和 _compact3_。每个配置文件都指定一组特定的 Java API 包并且包含小于自身的配置文件中的所有 API：_compact1_ 是 _compact2_ 的子集，后者是 _compact3_ 的子集，而再后者又是_完整 JRE_ 的子集。下表列出了每个配置文件中包含的包。

|===
|Compact1 |Compact2 |Compact3 |完整 JRE 

|* java.lang
* java.io
* java.nio
* java.text
* java.math
* java.net
* javax.net
* java.util
* java.util.logging
* java.security
* javax.crypto
* javax.security
 |_compact1_ 以及以下包：

* java.sql
* javax.sql
* javax.xml
* org.w3c.dom
* org.xml.sax
* java.rmi
* javax.rmi
* javax.transaction
 |_compact2_ 以及以下包：

* java.lang.management
* javax.management
* javax.naming
* javax.sql.rowset
* javax.security.auth.kerberos
* org.ietf.jgss
* javax.script
* javax.xml.crypto
* java.util.prefs
* javax.security.sasl
* javax.security.acl
* java.lang.instrument
* javax.annotation.processing
* javax.lang.model
* javax.lang.model.element
* javax.lang.model.type
* javax.lang.model.util
* javax.tools
 |_compact3_ 以及以下包：

* corba
* awt
* swing
 

|===

IDE 允许您根据需要在配置文件和完整 JRE 之间切换。

*要为 Java SE 项目设置项目配置文件，请执行以下操作：*

1. 右键单击项目，然后从上下文菜单中选择 "Properties"（属性）。
2. 在 "Project Properties"（项目属性）对话框中，选择 "Sources"（源）类别。
3. 使用 "Profile"（配置文件）下拉列表指定您的应用程序将支持的 JDK 8 配置文件。

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


[start=4]
. 单击 "OK"（确定）。

要了解 IDE 如何检查项目中使用的类是否属于指定的配置文件，请选择 "Compact1" 作为 AnagramGame 项目的配置文件，然后单击 "OK"（确定）。
IDE 将显示错误，以通知 AnagramGame 项目不符合 _compact1_ 配置文件。

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

您可以返回并将 AnagramGame 项目的配置文件设置为 Anagrams 应用程序支持的“完整 JRE”。


== 使用 Lambda 表达式支持

link:http://openjdk.java.net/projects/lambda/[+Lambda 表达式+]通过更加简洁地表示匿名内部类的结构，解决庞大的匿名内部类问题。

lambda 表达式的一般语法包含一组参数、一个箭头标记和一个函数体（单个表达式或一个语句块）：


[source,java]
----

(int a, int b) -> a * a + b * b;
----

NetBeans IDE 将检测预 lambda 表达式并在编辑器中显示提示，以建议将此类结构转变为 lambda 表达式。

例如，AnagramGame 项目以  ``Anagrams.java``  文件中的预 lambda 结构为特色，如下面的屏幕快照中所示。

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

在单击旁注中的电灯泡或按 Alt-Enter 组合键之后，IDE 将显示 "Use Lambda"（使用 Lambda）提示并提供一组选项：

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

如果选择了 "Use Lambda"（使用 Lambda）提示，则 IDE 会将匿名内部类转换为 lambda 表达式。

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

如果选择 "Run Inspect on"（运行检查于）选项，则 IDE 将显示 "Inspect"（检查）对话框，您可以在该对话框中对指定的文件运行单个 "Convert to Lambda"（转换为 Lambda）检查。

*注：*有关在 IDE 中启动 "Inspect"（检查）操作的更多信息，请参见_使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG613[+在源代码分析和重构中使用提示+]。

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

在您按 "Inspect"（检查）按钮启动检查之后，IDE 将标识文件中的所有预 lambda 结构并将其显示在 "Inspector"（检查器）窗口中。

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

如果选择 "Run Inspect&amp;Transform on"（运行检查和转换于）选项，则 IDE 将显示 "Inspect and Transform"（检查并转换）对话框，您可以在该对话框中对指定的代码运行单个 "Convert to Lambda"（转换为 Lambda）检查（或所选配置），并根据需要重构。

*注：*有关启动 "Inspect and Transform"（检查并转换）操作的更多信息，请参见_使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG613[+在源代码分析和重构中使用提示+]。

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


== 使用重复标注支持

Java SE 8 功能包含link:http://openjdk.java.net/jeps/120[+重复标注+]，通过该功能，可以将相同类型的标注应用到单个程序元素，如以下代码示例中所示：


[source,java]
----

@ProjectServiceProvider(service=Foo.class,"org-nebeans-modules-j2seproject")
@ProjectServiceProvider(service=Foo.class,"org-nebeans-modules-j2eeproject")
public class MyService extends Foo {}
 
----

NetBeans IDE 支持重复标注，允许您使用相同的标注编写代码，假定声明了重复标注类型和包含标注类型：

* 必须使用  ``@Repeatable ()``  标记可重复的标注类型，否则您在编译时会获得错误
* 包含标注类型必须具有一个数组类型的  ``value``  元素；该数组类型的组件类型必须是可重复的标注类型
link:/about/contact_form.html?to=3&subject=Feedback:%20Overview%20of%20JDK%208%20Support%20in%20NetBeans%20IDE[+发送有关此教程的反馈意见+]



== 另请参见

有关 JDK 8 的更多信息，请参见：

* link:http://jdk8.java.net/[+JDK 8 项目+]
* link:http://download.java.net/jdk8/docs/[+Java Platform Standard Edition 8 预览版文档+]
* link:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html[+Java SE 8：Lambda 快速入门 +]
* link:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html[+Java 教程：Lambda 表达式+]
* link:http://docs.oracle.com/javase/tutorial/java/annotations/repeating.html[+Java 教程：重复标注+]

有关在 NetBeans IDE 中开发 Java 应用程序的详细信息，请参见：

* _使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG366[+创建 Java 项目+]
* link:javase-intro.html[+开发常规 Java 应用程序+]
* link:../../trails/java-se.html[+常规 Java 开发学习资源+]
