如何将 Consumer<String> 传递给方法
How to pass Consumer<String> to the method
所以我有这样的代码:
public ConsumerTestClass(Consumer<String> consumer) {
}
public static void printString(String text) {
System.out.println(text);
}
并且根据其他 class 的方法,我想创建 ConsumerTestClass
的对象:
new ConsumerTestClass(/*passing consumer here*/);
作为消费者,我想传递 ConsumerTestClass::printString
,但为了能够做到这一点,我还需要传递参数,所以看起来像这样:(text) -> ConsumerTestClass.printString(text)
。我的问题是......它是传递消费者的唯一选择,还是接受一个参数但不返回任何结果的方法?
您可以将其传递为:
new ConsumerTestClass(ConsumerTestClass::printString);
这是
的方法参考
new ConsumerTestClass(x -> ConsumerTestClass.printString(x));
Is it only option to pass Consumer, or method which is accepting one
argument and returning no results?
这取决于你的用例,例如,如果你想传递两个参数但仍然没有 return 来自它们的任何东西,你可以查看 BiConsumer
class 作为嗯。
注意:一种特殊情况,当您不想对提供的Consumer
执行任何操作时,您可以选择将其定义为无操作 lambda,如:
new ConsumerTestClass(s -> {});
方法引用 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);
}
}
最重要的是,当您调用 Consumer
的 accept
方法时,您必须传入参数,就像在上面的构造函数中所做的那样。
所以我有这样的代码:
public ConsumerTestClass(Consumer<String> consumer) {
}
public static void printString(String text) {
System.out.println(text);
}
并且根据其他 class 的方法,我想创建 ConsumerTestClass
的对象:
new ConsumerTestClass(/*passing consumer here*/);
作为消费者,我想传递 ConsumerTestClass::printString
,但为了能够做到这一点,我还需要传递参数,所以看起来像这样:(text) -> ConsumerTestClass.printString(text)
。我的问题是......它是传递消费者的唯一选择,还是接受一个参数但不返回任何结果的方法?
您可以将其传递为:
new ConsumerTestClass(ConsumerTestClass::printString);
这是
的方法参考new ConsumerTestClass(x -> ConsumerTestClass.printString(x));
Is it only option to pass Consumer, or method which is accepting one argument and returning no results?
这取决于你的用例,例如,如果你想传递两个参数但仍然没有 return 来自它们的任何东西,你可以查看 BiConsumer
class 作为嗯。
注意:一种特殊情况,当您不想对提供的Consumer
执行任何操作时,您可以选择将其定义为无操作 lambda,如:
new ConsumerTestClass(s -> {});
方法引用 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);
}
}
最重要的是,当您调用 Consumer
的 accept
方法时,您必须传入参数,就像在上面的构造函数中所做的那样。