gpt4 book ai didi

java-8 - 带参数的 Java 8 函数引用

转载 作者:行者123 更新时间:2023-12-04 18:36:57 29 4
gpt4 key购买 nike

试图了解如何引用实例函数。我已经想出了如何定义 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com