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

标签 java-8 method-reference

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

相关文章:

java - Java 8 中的实例方法引用类型有什么区别?

java - 如何在 Java 8 中使用方法引用从非静态类调用非静态方法?

java - 对功能 (SAM) 接口(interface)变量使用属性 getter 方法引用

Java方法签名: Stream versus Collection versus var-arg

java - Java 8中以静态方式获取类名

Java:通用函数引用的编译错误

java - 是否有算术加法的 Java 方法引用?

java - 某些标点字符与启用的 Pattern.UNICODE_CHARACTER_CLASS 标志不匹配

java - 数字数字的递归总和(直到数字小于 10)仅限 java 8 lambdas

Java流在减少操作的情况下给出语法错误