码迷,mamicode.com
首页 > 编程语言 > 详细

Upgrading to Java 8

时间:2015-02-10 18:19:41      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

第一章 Lambda表达式

  Lamada 表达式是Java SE 8中最重要的新特性,长期以来被认为是在Java中缺失的特性,它的出现使整个java 语言变得完整。
至少到目前,在这节中你将学习到什么是lambda,为什么他是出色的一部分。同时也会介绍一些新的技术例如单一抽象方法和函数式接口。

  为什么是lambda 表达式。

  就像闭包一样, Lambda表达会使一些结构变得精简和良好的可读性,特别是在有处理内部类的时候。下面的例子是用内部类实现的代码块:

    Runnable runnable = new Runnable() {       

      @Override     public void run() {            

        System.out.println("Running...");       

      }    

    }

   其实,这些代码可以用Lambda表达式替换成如下简短的代码:

     Runnable runnable = () -> System.out.println("Running...")

  换句话说, 如果你需要传递一个 runnable 接口给java.util.concurrent.Executor类,需要

    executor.execute(new Runnable() {

         @Override    

      public void run() {        

        System.out.println("Running...");    

       }

     });

  但你可以用Lambda表达式实现同样的效果,用下面的代码;

     executor.execute(() -> System.out.println("Running..."));  

  精短,优雅,干净,更富有表达性。  

  修改接口。

  在深入研究lambda之前,先介绍一下在java 8 中接口里可以包含defalut 和 static 方法。这部分解释static和defalut 方法是什么,
  为什么这里需要大幅度的修改使lambda 融入到java 核心库中。

  默认方法

  将功能添加到接口是扩展接口一个安全的方式。不过,你最终会得到两个功能相似的接口。如果你只需要继承一个两个接口还是可以接受的,
  但如果需要添加新特性到成百的接口中,这就变成很严重的问题。

  这正是Java设计者们面对的问题,他们试图添加lambda 到java8 中去支持在集合框架中数十个接口。这些接口需要添加新的方法去支持Lambda,但是扩展所      有的接口只会产出一倍的接口,其中一些接口可能会冠以List2或ExtendeSet这些丑陋的名字。

  反而,他们通过添加default方法解决了这个问题。 默认方法是在接口中已经实现好的方法。一个接口实现类不用实现默认方法,
这就意味着你 添加新的方法在接口中同时没有打破向后兼容性问题。

  在接口中定义默认方法,只需要在方法签名前加上“default”关键字即可。除此之外,添加大括号并在其中添加代码。

  在以后能学到,在java8中很多接口都有默认方法。

  当你实现带有默认方法的接口时,你有这些选择:
    忽略默认方法,直接继承他们就生效。
    重新声明默认方法,要改成抽象方法。
    重载默认方法。 

  记住一点,java支持默认方法主要是为了向后兼容性。你绝不应该写程序不用类。

  静态方法。

  一个静态方法供类的所有实例共享,在java8以后,你可以在接口中使用静态方法 这样与接口相关联的所有静态方法可以用接口,而不是一个帮助类.

  静态方法的签名跟默认方法的签名很像,替代default关键字,使用static关键字,static在接口中默认是public的。

  静态方法在接口中很少见,在java.util package包中将近30个接口,只有两个有静态方法。

Upgrading to Java 8

标签:

原文地址:http://www.cnblogs.com/IcanFixIt/p/4284418.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!