java8新特性二-方法引用

Java 8 方法引用

引言

在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法。然而,有时候我们仅仅是调用了一个已存在的方法。如下:

Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2));

 在Java8中,我们可以直接通过方法引用来简写lambda表达式中已经存在的方法。

Arrays.sort(stringsArray, String::compareToIgnoreCase);

介绍

这种特性就叫做方法引用(Method Reference)。

方法引用通过方法的名字来指向一个方法。

方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

方法引用使用一对冒号 :: 

引用类型

方法引用的标准形式是:类名::方法名。(注意:只需要写方法名,不需要写括号

有以下四种形式的方法引用,用的最多的应该就是第三种:

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

案例(对比使用lambda)

package jdk8.lambda;

import java.time.LocalDate;
import java.util.Arrays;

/**
 * jdk8.lambda
 *
 * @Description:
 * @author: changliu
 * @Date: 2019/7/31
 */
public class refer {
    /**
     * 实体类-人
     */
    public static class Person{
        public Person(String name, LocalDate birthday) {
            this.name = name;
            this.birthday = birthday;
        }
        private String name;
        private LocalDate birthday;
        
        public static int compareByAge(Person a, Person b) {
            return a.birthday.compareTo(b.birthday);
        }
    }

    public static void main(String[] args) {
        Person[] pArr = new Person[]{
                new Person("003", LocalDate.of(2016,9,1)),
                new Person("001", LocalDate.of(2016,2,1)),
                new Person("002", LocalDate.of(2016,3,1)),
                new Person("004", LocalDate.of(2016,12,1))};
        
        //使用lambda表达式和类的静态方法
        Arrays.sort(pArr, (a , b) -> Person.compareByAge(a, b));

        //使用方法引用,引用的是类的静态方法
        Arrays.sort(pArr, Person::compareByAge);

        System.out.println(Arrays.asList(pArr));
    }
}

这个例子中红色标注的是使用了方法引用,可以看出更为简洁。

猜你喜欢

转载自www.cnblogs.com/wish5714/p/11277619.html