// 
//     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 中语言增强功能的关键功能（尤其是 lambda、功能操作和方法引用），以及如何使用 IDE 帮助您将代码迁移至 Java 8。

作者：Geertjan Wielenga
播放时长：14:00

link:http://bits.netbeans.org/media/smart-migration-java8.mp4[+下载/观看全图+] (60 MB)

 

|
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 教程：Lambda 表达式+]
* link:http://apex.oracle.com/pls/apex/f?p=44785:24:114639602012411::::P24_CONTENT_ID,P24_PREV_PAGE:7919,24[+Oracle 学习库：Java SE 8 Lambda 系列+]
