// 
//     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.
//

= Обзор поддержки JDK 8 в IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Обзор поддержки JDK 8 в IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Обзор поддержки JDK 8 в IDE NetBeans

Авторы: Томас Зезула (Tomas Zezula) и Алена Сташкова (Alyona Stashkova)

IDE NetBeans поддерживает link:http://openjdk.java.net/projects/jdk8/features/[+функции JDK 8+], такие как лямбда-выражения, повторные аннотации, компактные профили и т.д. Когда эти конструкции используются в коде, IDE распознает их, правильно выделяет ошибки и позволяет автоматически исправлять синтаксис. Таким образом, IDE NetBeans позволяет писать код, соответствующий link:http://download.oracle.com/otndocs/jcp/java_se-8-edr-spec/index.html[+спецификации Java SE 8 Release Contents Early Draft Review+].

Это практическое руководство научит вас работать с JDK 8 в IDE NetBeans и использовать поддержку таких функций Java SE 8, как лямбда-выражения, компактные профили и повторные аннотации.


image::images/netbeans-stamp-80-74.png[title="Содержимое на этой странице применимо к IDE NetBeans 7.4 и бета-версии 8.0"]


*Для работы с этим учебным курсом требуются программное обеспечение и материалы, перечисленные в таблице ниже.*

|===
|Программное обеспечение или ресурс |Требуемая версия 

|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |версия 7.4 и 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |версия 8 
|===


== Включение поддержки JDK 8 в IDE NetBeans

После загрузки и установки JDK 8 на компьютере необходимо зарегистрировать эту платформу в IDE:

1. В среде IDE выберите "Сервис" > "Платформы Java".
2. В диалоговом окне 'Диспетчер платформ Java' нажмите 'Добавить платформу'.
3. В диалоговом окне 'Добавление платформы Java' выберите Java Standard Edition и нажмите 'Далее'.
4. Укажите каталог, в котором находится JDK, и нажмите 'Далее'.

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



. Проверьте правильность местоположений по умолчанию для zip-архива Platform Sources и документации API. Для закрытия диалога добавления платформы Java нажмите кнопку "Готово".
Платформа JDK 8 зарегистрирована в IDE.

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



. Убедитесь в том, что в списке "Платформы" выбран пункт "JDK 1.8", и нажмите кнопку "Закрыть".


== Настройка проекта для работы с JDK 8

После регистрации платформы JDK 8 в IDE необходимо настроить проект для работы с JDK 8 и выполнения компиляции, запуска и отладки.

Создайте новый проект Java SE на основе примера игры Anagram, поставляемого в комплекте с IDE NetBeans.

1. В меню IDE выберите Файл > Создать проект.
2. В мастере создания проектов разверните категорию 'Образцы' и выберите Java.
3. В списке 'Проекты' выберите 'Игра Anagram'. Затем нажмите кнопку "Дальше".
4. На панели 'Имя и местоположение' оставьте без изменения данные в полях 'Имя проекта' и 'Местоположение проекта'.
5. Нажмите 'Готово'.
IDE создает проект Java SE и открывает его в окне 'Проекты'.

*Настройка проекта для работы с JDK 8:*

1. В окне 'Проекты' щелкните правой кнопкой мыши проект AnagramGame и выберите 'Свойства' в контекстном меню.
2. В диалоговом окне 'Свойства проекта' выберите категорию 'Библиотеки' и выберите JDK 1.8 в качестве платформы Java.

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



. Выберите категорию 'Источники', затем выберите JDK 8 в списке 'Исходный/двоичный формат'.

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



. Нажмите OK для сохранения изменений. 
Теперь проект настроен на распознавание новых функций языка 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. Щелкните проект правой кнопкой мыши и выберите 'Свойства' в контекстном меню.
2. В диалоговом окне 'Свойства проекта' выберите категорию 'Источники'.
3. Выберите из списка 'Профиль' поддерживаемый профиль JDK 8 для приложения.

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



. Нажмите ОК.

IDE проверяет, принадлежат ли классы, используемые в проекте, определенному профилю. Чтобы рассмотреть это на примере, выберите Compact1 в качестве профиля проекта AnagramGame и нажмите ОК.
В IDE отображаются сообщения об ошибках, указывающие на то, что проект AnagramGame несовместим с профилем _compact1_.

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

Вы можете вернуться и изменить профиль проекта AnagramGame на 'Полный JRE', поддерживаемый приложением Anagrams.


== Использование поддержки лямбда-выражений

link:http://openjdk.java.net/projects/lambda/[+Лямбда-выражения+] являются более компактным способом представления механизмов анонимных внутренних классов и делают эти классы менее массивными.

В общем случае синтаксис лямбда-выражения состоит из набора параметров, маркера стрелки и тела функции (одиночного выражения или блока выражений):


[source,java]
----

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

IDE NetBeans обнаруживает конструкции, которые можно преобразовать в лямбда-выражения, и в редакторе отображаются соответствующие подсказки.

Например, в проекте AnagramGame подобная конструкция есть в файле  ``Anagrams.java`` , показанном на рисунке.

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

Если нажать на значок подсказки или нажать Alt-Enter, в IDE отображается подсказка 'Использование лямбда', в которой предлагается несколько вариантов:

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

Если выбрать подсказку 'Использование лямбда', IDE преобразует анонимный внутренний класс в лямбда-выражение.

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

Если выбрать параметр 'Начать проверку в...', в IDE отображается диалоговое окно 'Проверка', в котором можно выполнить одну проверку 'Преобразование в лямбда' для выбранного файла.

*Примечание.* Дополнительные сведения о запуске операции 'Проверка' в IDE см. в разделе link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG613[+Использование подсказок при анализе и рефакторинге исходного кода+] в документе _Разработка приложений в IDE NetBeans_.

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

При нажатии на кнопку 'Проверка' IDE находит в файле все конструкции, которые можно преобразовать в лямбда-выражения, и отображает их в окне 'Инспектор'.

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

Если выбрать параметр 'Начать проверку и преобразование...', в IDE отображается диалоговое окно 'Проверка и преобразование', в котором можно выполнить одну проверку 'Преобразование в лямбда' (или выбранную конфигурацию) для указанного кода и при необходимости оптимизировать его.

*Примечание.* Дополнительные сведения о запуске операции 'Проверка и преобразование' см. в разделе link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG613[+Использование подсказок при анализе и рефакторинге исходного кода+] в документе _Разработка приложений в IDE NetBeans_.

[.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 {}
 
----

Поддержка повторных аннотаций в IDE NetBeans позволяет писать код с одними и теми же аннотациями при условии, что объявлены соответствующие типы аннотаций (повторные или содержащие):

* Повторная аннотация должна иметь обозначение  ``@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 Early Access+]
* link:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html[+Java SE 8. Краткое руководство по лямбда-выражениям+]
* link:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html[+Практические руководства по Java: лямбда-выражения+]
* link:http://docs.oracle.com/javase/tutorial/java/annotations/repeating.html[+Практические руководства по Java: повторные аннотации+]

Дополнительные сведения о разработке приложений в IDE NetBeans см. следующие ресурсы:

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG366[+Создание проектов Java+] в документе _Разработка приложений в IDE NetBeans_
* link:javase-intro.html[+Разработка общих приложений, написанных на Java+]
* link:../../trails/java-se.html[+Учебная карта по общим сведениям о разработке на Java+]
