JDK8系列之Method References教程和示例

Posted smileNicky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK8系列之Method References教程和示例相关的知识,希望对你有一定的参考价值。

JDK8系列之方法引用教程和示例

在上一章的学习中,我们学习了JDK8的lambada表达式,接着,本章节继续学习jdk8的方法引用

1、什么是jdk8方法引用

方法引用,英文Method References,jdk8中的方法引用通过方法的名字来指向一个方法,语法是使用一对冒号 ::,方法引用可以使语言的构造更紧凑简洁,减少冗余代码

2、方法引用的分类

方法引用的使用有如下几种:

  • 类的静态方法引用,类名::静态方法名
    语法:ClassName :: staticMethodName
  • 特定对象的实例方法引用,对象::实例方法名
    语法:object :: instanceMethodName
  • 类的任意对象的实例方法引用,类名::实例方法名
    语法:ClassName :: instanceMethodName
  • 构造器引用,类名::new(构造方法的引用)
    语法:ClassName :: new

3、类的静态方法引用

import java.util.function.BiFunction;
public class MethodReferenceExample {
    public MethodReferenceExample() {
    }
    public static void main(String[] args) {
        // example 1:引用类的静态方法
        BiFunction<Integer , Integer , Integer> add = MethodReferenceExample::add;
        int pr1 = add.apply(5 , 20);
        System.out.println(String.format("两个数相加的和:%s" , pr1));
    }
    public static int add(int a , int b) {
        return a + b;
    }
}


4、类的任意对象的实例方法引用

import java.util.Arrays;
public class MethodReferenceExample {
    public MethodReferenceExample() {
    }
    public static void main(String[] args) {
        // example 2:引用类的实例方法
        String[] strs = {"Apple", "Banana" , "Apricot","Cumquat", "Grape", "Lemon","Loquat","Mango"};
        Arrays.sort(strs , String::compareToIgnoreCase);
        Arrays.asList(strs).forEach(str -> {System.out.println(String.format("水果名称:%s", str));});
    }
}

5、特定对象的实例方法引用

public class MethodReferenceExample {

    public MethodReferenceExample() {
    }
    public static void main(String[] args) {
        // example 3:引用对象的实例方法
        MethodReferenceExample example = new MethodReferenceExample();
        MyFunctionalInterface functionalInterface = example::echo;
        functionalInterface.display();
    }
    public void echo() {
        System.out.println("hello world");
    }
}

@FunctionalInterface
interface MyFunctionalInterface{
    void display();
}

6、对构造函数的方法引用

public class MethodReferenceExample {
    public MethodReferenceExample() {
    }
    public MethodReferenceExample(String msg) {
        System.out.println(String.format("参数打印:%s" , msg));
    }

    public static void main(String[] args) {
        // example 4:构造方法的引用
        MyInterface myInterface = MethodReferenceExample::new;
        myInterface.display("Method reference to a constructor");
    }
}
@FunctionalInterface
interface MyInterface{
    void display(String msg);
}

附录:参考资料

以上是关于JDK8系列之Method References教程和示例的主要内容,如果未能解决你的问题,请参考以下文章

JDK8系列之Optional API应该怎样用?

JDK8系列之Stream API入门教程和示例

JDK8系列之Functional Interfaces教程和示例

JDK8系列之default定义接口的默认实现方法

方法引用(Method References)

方法引用(Method References)