zoukankan      html  css  js  c++  java
  • java8的新特性


    1.Lambda表达式:可以称为闭包,Lambda语法来代替匿名的内部类,代码不仅简洁,而且还可读,最重要的是代码量也随之减少很多。
    1.1语法:(parameters) -> expression或(parameters) ->{statements;}
    ():参数列表;
    ->: 运算符;
    即:() -> lambda主体(单一表达式或语句块)
    1.2变量作用域:只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误
    1.3 eg:
    无参数:
    //不使用Lambda表达式

    1 Runnable runnable1=new Runnable(){
    2     @Override
    3     public void run(){
    4         System.out.println("Running without Lambda");
    5     }
    6 };

    //使用Lambda表达式

    1 Runnable runnable2=()->System.out.println("Running from Lambda");

    一个参数:x -> 2 * x ;
    两个参数:(x, y) -> x – y ;

    2.方法引用:通过方法的名字来指向一个方法,可以使语言的构造更紧凑简洁,减少冗余代码。
    语法:使用一对冒号 ::。

    1 @FunctionalInterface
     2 public interface Supplier<T> {
     3     T get();
     4 }
     5  
     6 class Car {
     7     //Supplier是jdk1.8的接口,这里和lamda一起使用了
     8     public static Car create(final Supplier<Car> supplier) {
     9         return supplier.get();
    10     }
    11  
    12     public static void collide(final Car car) {
    13         System.out.println("Collided " + car.toString());
    14     }
    15  
    16     public void follow(final Car another) {
    17         System.out.println("Following the " + another.toString());
    18     }
    19  
    20     public void repair() {
    21         System.out.println("Repaired " + this.toString());
    22     }
    23 }
    • 构造器引用:它的语法是Class::new,或者更一般的Class< T >::new实例如下:

      final Car car = Car.create( Car::new )final ListCar > cars = Arrays.asList( car );
    • 静态方法引用:它的语法是Class::static_method,实例如下:

      cars.forEach( Car::collide );
    • 特定类的任意对象的方法引用:它的语法是Class::method实例如下:

      cars.forEach( Car::repair );
    • 特定对象的方法引用:它的语法是instance::method实例如下:

      final Car police = Car.create( Car::new )cars.forEach( police::follow );

    3.函数式接口:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

    函数式接口可以被隐式转换为 lambda 表达式。

  • 相关阅读:
    新 DAO 访问接口
    TCP/IP协议中的参数说明
    最近在制作一套ASP.NET控件,已初见雏形
    Creating a Dynamic UI with Knockout.js
    数据库性能优化数据库等待队列
    webpy框架
    .Net Web Http状态异常
    一步一步搭架子(完结篇)
    使用yshow分析前端页面性能
    代码混淆、加密
  • 原文地址:https://www.cnblogs.com/talenter/p/9926086.html
Copyright © 2011-2022 走看看