java - 如何将 Consumer<String> 传递给方法

标签 java java-8 java-stream functional-interface

所以我确实有这样的代码:

public ConsumerTestClass(Consumer<String> consumer) {

}

public static void printString(String text) {
    System.out.println(text);

}

然后从其他类的方法,我想创建ConsumerTestClass的对象:

new ConsumerTestClass(/*passing consumer here*/);

作为消费者,我想传递 ConsumerTestClass::printString,但为了能够做到这一点,我还需要传递参数,所以它看起来像这样:(text ) -> ConsumerTestClass.printString(文本)。我的问题是......它是传递消费者的唯一选择,还是接受一个参数但不返回任何结果的方法?

最佳答案

方法引用 ConsumerTestClass::printString 只是等效 lambda 表达式 text -> ConsumerTestClass.printString(text) 的语法糖

方法引用不能用于任何方法。它们只能用于替换单一方法的 lambda 表达式。通常,我们不必将参数传递给方法引用。在这种情况下,printString 方法采用的参数会在后台自动传递。

方法引用提供了一种生成比 lambda 更简洁的函数对象的方法。

因此,最好将方法引用作为对 lambda 的一种良好做法。

这是完整的示例。

public class ConsumerTestClass {
    public ConsumerTestClass(Consumer<String> consumer) {
        consumer.accept("Test");
    }

    public static void printString(String text) {
        System.out.println(text);

    }

    public static void main(String[] args) {
        new ConsumerTestClass(ConsumerTestClass::printString);
    }
}

最重要的是,当您调用 Consumeraccept 方法时,您必须传入参数,就像在上面的构造函数中所做的那样。

关于java - 如何将 Consumer<String> 传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54588558/

相关文章:

java - Java中使用字符串返回对象

Java 8+ 流 : Check if list is in the correct order for two fields of my object-instances

Java 流 forEach concurrentModificationException 异常行为

java - 使用 Stream API 创建 Map<String, List<Object>> ,其中对列表的元素进行排序

java - 有没有一种很好的方法来使用流过滤列表并获取项目列表或如果没有项目通过过滤器则获取 null ?

spring-mvc - Spring Data JPA - Java 8 流支持和事务最佳实践

java - Fxml 文件未在 Eclipse 中更新

java - 如何在 Spring 配置文件中初始化 boolean 值?

java - 获取htmlunit中td元素的值

java - 如何实现泛型Function方法参数?