Java 8 方法引用

原文:https://www.studytonight.com/java-8/java-8-method-reference

方法引用是 Java 中的一个新概念,是在 Java 8 版本中加入的。这个特性允许我们通过使用方法引用来调用方法。它的主要用途是调用函数接口的方法,并使用':'运算符将类或对象与方法名分开。例如类名::方法名对象::方法名。我们将在后面的例子中看到它。

我们希望您了解函数式接口,因为这个主题与它相关。如果你是初学者,那么我们建议你首先阅读我们的文章 Java 函数接口,然后继续阅读这篇文章。

Java 中方法引用的类型

Java 中有四种类型的方法引用,请参见以下内容:

  • 对静态方法的引用

  • 对实例方法的引用

  • 对构造器的引用

静态方法引用

要引用静态方法,有以下语法引用另一个类或接口的静态方法。

语法

className::staticMethod

示例:

在这个例子中,我们使用方法引用概念来引用静态方法。

interface JavaInterface{
    void showInterfaceInfo();
}

public class STDemo {
    static void show() {
        System.out.println("This is called using method reference");
    }
    public static void main(String[] args) {
        // Referring Method
        JavaInterface ji = STDemo::show;
        ji.showInterfaceInfo();
    }
}

这称为使用方法引用

例:参考库静态法

在这个例子中,我们指的是数学类的静态方法。我们所指的静态方法是用户定义的方法或库方法。

interface JavaInterface{
    int findMax(int a, int b);
}

public class STDemo {

    public static void main(String[] args) {
        // Referring Method
        JavaInterface ji = Math::max;
        int result = ji.findMax(10, 20);
        System.out.println(result);

    }
}

Twenty

实例方法引用

当我们使用方法引用概念引用一个实例方法时,它被称为实例方法引用。我们使用类对象来引用实例方法。下面给出了实例方法引用的语法。

语法

object::instanceMethod

示例:

在本例中,我们将方法 show()引用为 showInterfaceInfo()方法。调用 showInterfaceInfo()实际上是引用和调用 show()方法。

interface JavaInterface{
    void showInterfaceInfo();
}

public class STDemo {
    void show() {
        System.out.println("This is called using instance method reference");
    }
    public static void main(String[] args) {
        STDemo demo = new STDemo();
        // Referring Method
        JavaInterface ji = demo::show;
        ji.showInterfaceInfo();
    }
}

这称为使用方法引用

示例:引用库实例方法

这里,我们引用的是 length(),这是一个String类的实例方法,来自于 JavaInterface 的 stringLenght()方法。length()方法是一个内置的 String 方法,我们在这里用自己的方法引用它。

interface JavaInterface{
    int stringLength();
}

public class STDemo {
    public static void main(String[] args) {
        STDemo demo = new STDemo();
        // Referring Method
        JavaInterface ji = "hello"::length;
        int result = ji.stringLength();
        System.out.println(result);
    }
}

five

对构造器的引用

这是方法引用的类型之一,允许我们用稍微不同的语法调用构造器。

语法

className::new

示例:

在这个例子中,我们从一个方法引用中引用一个构造器。构造器可以是默认的或参数化的,并且能够被方法引用调用。

interface JavaInterface{
    void showInfo();
}

public class STDemo {

    STDemo(){
        System.out.println("Constructor using method reference");
    }

    public static void main(String[] args) {
        // Referring Constructor
        JavaInterface a = STDemo::new;
        a.showInfo();

    }
}

使用方法引用的构造器

另一个例子:调用参数化构造器

interface JavaInterface{
    void showInfo(String msg);
}

public class STDemo {

    STDemo(String msg){
        System.out.println(msg);
    }

    public static void main(String[] args) {
        // Referring Constructor
        JavaInterface a = STDemo::new;
        a.showInfo("StudyTonight");

    }
}

今晚学习