试图了解如何引用实例函数。我已经想出了如何定义 getter,但是 setter 给我带来了麻烦。我不确定如何为给定的方法签名和给定的基类编写函数。
什么类型是Foo::setBar
以下?
public class Foo {
private String bar;
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
{
//Works great!
Function<Foo, String> func1 = Foo::getBar;
//Compile error ?
Function<Foo, String> func2 = Foo::setBar;
//Compile error ?
Function<Foo, Void, String> func3 = Foo::setBar;
}
最佳答案
您的 Function<Foo, String> func2 = Foo::setBar;
是编译错误,因为 public void setBar(String bar)
这不是来自 Foo
的函数至 String
,它实际上是来自 String
的一个函数至 Void
.
如果要将 setter 作为方法引用传递,则需要一个 BiConsumer,取一个 Foo
和一个 String
喜欢
final BiConsumer<Foo, String> setter = Foo::setBar;
或者,如果您已经获得了
foo
的实例,您可以简单地使用它并使用 Consumer
,例如Foo foo = new Foo();
final Consumer<String> setBar = foo::setBar;
关于java-8 - 带参数的 Java 8 函数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279466/