通过参数中的方法调用方法

Mr.*_*r33 0 java lambda

如何调用通过Java 8中的方法中的参数传递的方法?

小例子我有这样的方法:

void output(String text) {
    System.out.println(text)
}
Run Code Online (Sandbox Code Playgroud)

现在我想将该方法传递给另一个应该调用output和设置文本内容的类.那可能吗?

mar*_*ran 5

要传递函数的类必须采用类型的参数Consumer<String>.此类表示一个函数,它接受某种类型的参数(String在本例中),并具有返回类型void.A Consumer有一个accept获取参数并调用函数的方法.

你可以像这样创建你的类:

class Test {
    Test(Consumer<String> consumer) {
        consumer.accept("This is a string!");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当您想要实例化此类时,您需要将您的函数传递给它,如下所示:

Test t = new Test(this::output);
Run Code Online (Sandbox Code Playgroud)

::符号被称为方法参考.在this(前冒号)意味着该方法位于你所在的对象,它是可以改变的,例如,MyClass::output如果它是一个静态方法MyClass,或者myObject::output如果它是对象的一个方法myObject.