Eric小屋

  • JAVA方法引用详解
  • 引用类方法
  • 引用对象的实例方法
  • 引用类的实例方法
  • 引用构造器
  • 首页
  • 学习笔记
    • JAVA
    • Spring
    • Node.js
    • Vue
  • 学习文档
  • 案例项目
  • 课程笔记
  • 问题解决
登录

JAVA方法引用详解

  • Eric
  • 2023-12-12
  • 0

JAVA方法引用详解

在Java中,方法引用是一种强大的功能,它允许您在Lambda表达式中引用方法,而不是在表达式中直接定义这些方法。方法引用使代码更加简洁和可读,尤其在函数式编程中非常有用。

引用类方法

引用类方法是一种最简单的,引用式方法,它允许你引用静态方法。

语法:

引用类方法的语法为:

ClassName::staticMethodName

其中,ClassName是包含静态方法的类的名称,staticMethodName是要引用的静态方法的名称。

示例:

让我们通过一个示例来演示引用类方法的用法。假设有一个名为MathUtils的工具类,其中包含一个静态方法square,用于计算一个数的平方。

// MathUtils.java
public class MathUtils {
    public static int square(int num) {
        return num * num;
    }
}

现在,我们可以使用方法引用来引用这个静态方法:

import java.util.function.IntUnaryOperator;

public class MethodReferenceExample {
    public static void main(String[] args) {
        IntUnaryOperator squareFunction = MathUtils::square;

        int result = squareFunction.applyAsInt(5);
        System.out.println("Square of 5 is " + result);
    }
}

在上面的示例中,我们首先创建了一个IntUnaryOperator函数式接口的实例squareFunction,并将MathUtils::square作为引用传递给它。然后,我们使用applyAsInt方法调用这个函数,并传入参数5,得到计算结果。

这里,MathUtils::square引用了MathUtils类的静态方法square,并且可以像Lambda表达式一样使用。

引用对象的实例方法

引用对象的实例方法是一种更常见和有用的方法引用方式。它允许您引用已经存在的对象的实例方法,而不是在Lambda表达式中定义新的方法。

语法:

引用对象的实例方法的语法为:

object::instanceMethodName

其中,object是要引用方法的对象的名称或引用,instanceMethodName是要引用的实例方法的名称。

示例:

让我们通过一个示例来演示引用对象的实例方法的用法。假设有一个名为Person的类,其中包含一个实例方法printName,用于打印人的姓名。

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public void printName() {
        System.out.println("Name: " + name);
    }
}

现在,我们可以使用方法引用来引用printName方法:

import java.util.function.Consumer;

public class MethodReferenceExample {
    public static void main(String[] args) {
        Person person = new Person("Alice");

        Consumer<Person> printNameFunction = Person::printName;
        printNameFunction.accept(person);
    }
}

在上面的示例中,我们首先创建了一个Consumer<Person>函数式接口的实例printNameFunction,并将Person::printName作为引用传递给它。然后,我们使用accept方法调用这个函数,并传入一个Person对象,它会打印该对象的姓名。

这里,Person::printName引用了Person类的实例方法printName,并且可以在函数式接口中使用。

引用类的实例方法

引用类的实例方法的语法为:

ClassName::instanceMethodName

其中,ClassName是包含实例方法类的名称,instanceMethodName是要引用的实例方法的名称

示例:

让我们通过一个示例来演示引用类的实例方法的用法。假设有一个名为Person的类,其中包含一个实例方法getName,用于获取人的姓名。

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

现在,我们可以使用方法引用来引用getName方法:

import java.util.List;
import java.util.function.Function;

public class MethodReferenceExample {
    public static void main(String[] args) {
        List<Person> people = List.of(new Person("Alice"), new Person("Bob"));

        Function<Person, String> getNameFunction = Person::getName;

        for (Person person : people) {
            String name = getNameFunction.apply(person);
            System.out.println("Name: " + name);
        }
    }
}

引用构造器

引用构造器是一种特殊的方法引用方式,用于创建对象。它允许您引用类的构造器,以便在Lambda表达式中创建对象。

语法

引用构造器的语法为:

ClassName::new

其中,ClassName是要引用构造器的类的名称

示例:

让我们通过一个示例来演示引用构造器的用法。假设有一个名为Person的类,它有一个带参数的构造器。

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

现在,我们可以使用方法引用来引用Person类的构造器:

import java.util.function.Supplier;

public class MethodReferenceExample {
    public static void main(String[] args) {
        Supplier<Person> personSupplier = Person::new;

        Person person = personSupplier.get();
        System.out.println("Created person with name: " + person.getName());
    }
}

在上面的示例中,我们创建了一个Supplier<Person>函数式接口的实例personSupplier,并将Person::new作为引用传递给它。然后,我们使用get方法调用personSupplier来创建一个`Person对象。

这里,Person::new引用了Person类的构造器,并且可以在函数式接口中使用。

联系作者:2572976830@qq.com
© 2025 Eric小屋
Theme by Wing
京ICP备2023032157号 京公网安备11011402053616号
  • {{ item.name }}
  • {{ item.name }}