// 
//     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へのスマート移行のビデオ

|===
|このスクリーンキャストでは、Java 8の言語拡張の主要機能(特にラムダ、関数操作、メソッド参照)を示し、IDEを使用してコードをJava 8に移行する方法について説明します。

作成者: Geertjan Wielenga
時間: 14:00

link:http://bits.netbeans.org/media/smart-migration-java8.mp4[+ダウンロード/フルサイズを視聴+] (60MB)

 

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


== 関連リンク

* link:http://openjdk.java.net/projects/jdk8/[+JDK 8プロジェクト・ページ+]
* link:https://netbeans.org/kb/docs/java/javase-jdk8.html[+NetBeans IDEでのJDK 8サポートの概要+]
* link:https://netbeans.org/features/java/index.html[+NetBeans機能のページ: Java+]
* link:https://netbeans.org/kb/trails/java-se.html[+一般的なJava開発NetBeansの学習+]
* link:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html[+Javaチュートリアル: ラムダ式+]
* link:http://apex.oracle.com/pls/apex/f?p=44785:24:114639602012411::::P24_CONTENT_ID,P24_PREV_PAGE:7919,24[+Oracle Learning Library: Java SE 8ラムダ・シリーズ+]
