How to pass Consumer<String> to the method

Suu*_*ule 6 java java-8 java-stream functional-interface

so I do have code like this:

public ConsumerTestClass(Consumer<String> consumer) {

}

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

}
Run Code Online (Sandbox Code Playgroud)

And from the method of other class, I would like to create object of ConsumerTestClass:

new ConsumerTestClass(/*passing consumer here*/);
Run Code Online (Sandbox Code Playgroud)

And as a consumer I would like to pass ConsumerTestClass::printString, but to be able to do that I need to pass argument as well, so it looks like that: (text) -> ConsumerTestClass.printString(text). And my question is... Is it only option to pass Consumer, or method which is accepting one argument and returning no results?

Rav*_*ala 10

方法引用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

最重要的是,当您在上面的构造函数中调用as done的accept方法时,您必须传入参数Consumer