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。
| 归档时间: |
|
| 查看次数: |
5238 次 |
| 最近记录: |