Java 8 带参数的函数引用
Java 8 Function Reference With Arguments
试图了解如何引用实例函数。我已经弄清楚如何定义 getter,但是 setter 给我带来了麻烦。我不确定如何为给定的方法签名和给定的基数编写函数 class.
下面的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;
}
由于setBar
有void
return类型,匹配的功能接口单一抽象方法也必须有void
return类型。此类功能接口通常称为 "consumers"。在您的特定情况下,您需要使用 BiConsumer
接受一个 Foo
对象和一个新的柱值:
BiConsumer<Foo, String> func2 = Foo::setBar;
你的Function<Foo, String> func2 = Foo::setBar;
是编译错误,因为public void setBar(String bar)
不是Foo
到String
的函数,它实际上是String
的函数至 Void
.
如果你想传递 setter 作为方法引用,你需要一个 BiConsumer,需要一个 Foo
和一个 String
like
final BiConsumer<Foo, String> setter = Foo::setBar;
或者如果你已经有一个 foo
的实例,你可以简单地使用它并使用 Consumer
,例如
Foo foo = new Foo();
final Consumer<String> setBar = foo::setBar;
试图了解如何引用实例函数。我已经弄清楚如何定义 getter,但是 setter 给我带来了麻烦。我不确定如何为给定的方法签名和给定的基数编写函数 class.
下面的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;
}
由于setBar
有void
return类型,匹配的功能接口单一抽象方法也必须有void
return类型。此类功能接口通常称为 "consumers"。在您的特定情况下,您需要使用 BiConsumer
接受一个 Foo
对象和一个新的柱值:
BiConsumer<Foo, String> func2 = Foo::setBar;
你的Function<Foo, String> func2 = Foo::setBar;
是编译错误,因为public void setBar(String bar)
不是Foo
到String
的函数,它实际上是String
的函数至 Void
.
如果你想传递 setter 作为方法引用,你需要一个 BiConsumer,需要一个 Foo
和一个 String
like
final BiConsumer<Foo, String> setter = Foo::setBar;
或者如果你已经有一个 foo
的实例,你可以简单地使用它并使用 Consumer
,例如
Foo foo = new Foo();
final Consumer<String> setBar = foo::setBar;