美文网首页JavaEE 学习专题技术干货基础原理
3.Java8新特性 - 方法引用与构造器

3.Java8新特性 - 方法引用与构造器

作者: Mr_欢先生 | 来源:发表于2018-10-24 22:17 被阅读87次

一.方法的引用

  • 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例。
  • 注意方法引用是一个Lambda表达式,其中方法引用的操作符是双冒号"::"

二.四种方法引用类型

方法引用的标准形式是:类名::方法名。(方法名不含括号)

类型 示例
引用静态方法 ContainingClass::staticMethodName
引用某个对象的实例方法 containingObject::instanceMethodName
引用某个类型的任意对象的实例方法 ContainingType::methodName
引用构造方法 ClassName::new
import java.util.Date;

public class User {
    private Date createDate;

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public static int compareByAge(User a, User b){
        return a.createDate.compareTo(b.createDate);
    }

}

  • 静态方法引用
public void test() {
        User[] users = new User[5];

        //使用lambda表达式
        Arrays.sort(users, (o1, o2) -> o1.getCreateDate().compareTo(o2.getCreateDate()));
        //等价于
        Arrays.sort(users, (o1, o2) -> User.compareByAge(o1, o2));
        //方法引用
        Arrays.sort(users, User::compareByAge);
    }

  • 引用对象的实例方法
public void test() {
        User [] users = new User[5];
        class ComparisonProvider{
            public int compareByAge(User a,User b){
                return a.getCreateDate().compareTo(b.getCreateDate());
            }
        }
        ComparisonProvider provider = new ComparisonProvider();

        //lambda表达式
        Arrays.sort(users,(a,b)->provider.compareByAge(a,b));

        //使用方法引用
        Arrays.sort(users, provider::compareByAge);
    }
  • 引用类型对象的实例方法
public void test() {
        String[] array = {"Hello","lamdba"};

        //lambda表达式
        Arrays.sort(array,(s1,s2)->s1.compareToIgnoreCase(s2));

        //使用方法引用
        Arrays.sort(array, String::compareToIgnoreCase);
    }
  • 引用构造方法
@FunctionalInterface
interface MyFuntion {

    User function(Date n);
}

public class Main {
    public void test() {

        //lambda表达式
        MyFuntion myFuntion = (data)-> new User(data);

        //使用方法引用
        MyFuntion myFuntion = User::new;
    }
}

相关文章

  • 3.Java8新特性 - 方法引用与构造器

    一.方法的引用 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的...

  • JAVA8新特性简介

    新特性 1、Lambda表达式 2、函数式接口 3、方法引用与构造器引用 4、Stream API 5、接口中的默...

  • Java8新特性--方法引用与构造器引用

    方法引用与构造器引用 使用场景 如果要传递给Lambda方法体的内容,已经有方法实现了,这时我们就可以使用“方法引...

  • JDK1.8 新特性

    JDK1.8 新特性 Lambda表达式函数式接口*方法引用和构造器调用Stream API接口中的默认方法和静态...

  • 从0开始复习java(1)

    java语言概述 1、java8的新特性。 重新设计的接口语法,Lambda表达式,方法引用,构造器引用,函数式编...

  • 方法引用与构造引用

    方法引用 构造器引用

  • Java 8 新特性:方法引用

    Java 8 新特性:方法引用 一、是什么? 方法引用是用来直接访问类或者实例已经存在的方法或者构造方法。计算时,...

  • 方法引用与构造器引用

    一、方法引用 1、什么是方法引用 当要传递给Lambda体的操作,已经有实现的方法,可以使用方法引用。(实现抽象方...

  • Java8新特性-方法引用、构造器引用和数组引用

    1. 方法引用 若lambda体中的内容有方法已经实现了,我们可以使用‘方法引用’,可以理解为方法引用是lambd...

  • Java8(JDK1.8)新特性

    一、Java8(JDK1.8)新特性 1、Lamdba表达式 2、函数式接口 3、方法引用和构造引用 4、Stre...

网友评论

本文标题:3.Java8新特性 - 方法引用与构造器

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