美文网首页
jdk8新特性

jdk8新特性

作者: shichong | 来源:发表于2017-09-18 16:05 被阅读13次

API:http://docs.oracle.com/javase/8/docs/api/

新特性:
http://blog.csdn.net/wangnan537/article/details/49102877

  1. 接口中定义默认方法,使用关键字default。

public interface DemoInterface{
int calculate(int x, int y);
default int add(int x, int y) {
return x + y;
}
}

子类只需要实现抽象方法add即可,可直接使用minus方法。
public class DemoInterfaceImpl implements DemoInterface() {
public int calculate(int x, int y) {
return add(x + y);
}
}

  1. 函数式接口
    定义:一个接口中仅仅只有一个抽象方法,可加注解@FunctionalInterface,如果接口中的抽象方法多于一个会报错。
    可以将lambda表达式当做只有一个抽象方法的接口类型。
    四大内置核心函数接口:
    1> Consumer<T>:消费型接口
    void accpt(T t);
    2> Supplier<T>:提供者接口
    T get();
    3> Function(T, R):函数型接口
    R apply(T t);
    4> Predicate<T>:断型接口
    boolean test(T t);

  2. lambda表达式
    labmda表达式中访问局部变量(隐藏final类型)时,不可改变其值;
    如果访问实例的变量或静态变量则可以改变其值。
    lambda表达式中不能用默认方法。
    lambda表达式结构:
    左边:参数列表(不写参数类型也行,可进行类型推断)
    中间:箭头->
    右边:方法体
    lambda表达式的语法格式:
    1>无参无返回值:() -> System.out.println("aa");
    2>有一个参数,无返回值:
    (x) -> System.out.println();
    x -> System.out.println();
    3>参数两个以上,有返回值:
    Comparator<Integer> cop = (x, y) ->{
    //other services
    return Integer.compare(x, y);
    }
    4>参数若干,一条返回语句:
    Comparator<Integer> cop = (x,y) -> Integer.compare(x, y);
    5>参数列表中的数据类型可以省略,jvm可以进行“类型推断”
    Comparator<Integer> cop = (Integer x, Integer y) -> Integer.compare(x, y);
    Comparator<Integer> cop = (x, y) -> Integer.compare(x, y);

  3. 方法引用
    当要传递给lambda表达式体的操作,已经有实现的方法了,可以使用方法引用。
    方法引用的参数列表和返回类型必须与函数式接口中的抽象方法的参数列表和返回类型一致。
    格式如下:

               对象::对象方法
    
               类::静态方法
    
               类::对象方法(如果参数列表中的第一个参数是实例方法的调用者,第二个参数是实例方法的参数,可以使用: className::methodName)
             BiPredicate<String, String> bp = (x,y) -> x.equals(y);  
             BiPredicate<String, String> bp = String::equals;
    
  4. 构造器引用:className::new
    参数列表和函数式接口中的参数列表保持一致。
    Function<String, String> fun = String::new;
    System.out.println(fun.apply("fun"));

  5. 数组引用:type[]::new
    Function<Integer, String> fun = String[]::new;
    System.out.println(fun.apply(3).length);

【==========================未完待续==========================】

  1. Stream流应用
  1. Optional,防止空指针
  2. 新日期
  3. annotation重复注解

相关文章

  • JDK8新特性介绍

    JDK8新特性介绍 JDK8新特性:​ 1,Lambda表达式​ 2,新的日期API​ 3,引入Optional​...

  • jackson parser LocalDataTime 问题

    jackson parser LocalDataTime 问题 LocalDataTime 是 jdk8 的新特性...

  • 面试

    sql语句 jdk8新特性 lamed 测试单元测试

  • @FunctionalInterface函数式接口

    JDK8新特性:函数式接口@FunctionalInterface的使用说明

  • FunctionalInterface函数式接口

    关于jdk8的新特性函数式接口示例以及描述 代码示例

  • JDK8新特性

    Lambda语法 Lambda是什么? "Lambda表达式"(Lambda expression)是一个匿名函数...

  • jdk8新特性

    API:http://docs.oracle.com/javase/8/docs/api/ 新特性:http://...

  • JDK8 新特性

    为什么要学Java8 Java8让你的编程变得更容易 充分稳定的利用计算机硬件资源 Lambda lambda 是...

  • jdk8新特性

    Jdk8相对之前的jdk加入了很多的新特性。 1:jdk中加入了default关键字。 在java里面,我们通常都...

  • jdk8新特性

    默认方法。一个在接口里面有了一个实现的方法。只需在方法名前面加个 default 关键字即可实现默认方法。 lam...

网友评论

      本文标题:jdk8新特性

      本文链接:https://www.haomeiwen.com/subject/juaayttx.html