繁体   English   中英

如何将参数传递给可运行方法

[英]how to pass parameters to runnable method

我有一个 function functionAcceptsMethod ,它接受一个可运行的方法作为参数,我想通过传递一个带参数的方法来调用functionAcceptsMethod

当我通过不带参数传递来调用functionAcceptsMethod时,它很好,但是如何传递带参数的 function。

这是一个例子

 private void testFun() {
        functionAcceptsMethod(this::funWithoutParams);
        functionAcceptsMethod(this::funWithParams); // this where I need to pass params
        //functionAcceptsMethod(() -> funWithParams("abcd")); // I tried this, is this the right 
         //way?
    }

private void funWithoutParams() {
    //do something
}

private void funWithParams(String testString) {
    //do something
}

private  void functionAcceptsMethod(Runnable method) {
    method.run();
}

正确的方法是使用带有参数的functionAcceptsMethod方法的一个版本:

private void <T> functionAcceptsMethod(Consumer<T> method, T argument) {
    method.accept(argument);
}

注意Runnable#run是一个没有参数的函数式接口,所以这里不能使用。 您必须使用Consumer 现在你可以这样做:

functionAcceptsMethod(this::funWithParams, "abc");

查看java.util.function了解更多可能性。

是的,方法

functionAcceptsMethod(() -> funWithParams("abcd"));

没关系,如果您的目的只是传递方法引用并在functionAcceptsMethod方法的参数中获取 args,则使用Consumer<T>作为 function 接收器参数

正如你想要一个例子:

public static <T> void functionAcceptsMethod(Consumer<T> consumer, T t){
    consumer.accept(t);
}

这是一个通用版本,将接受任何具有单个输入参数的方法。 和一个使用示例:

public void example(){
    // Automatic type inferring
    functionAcceptsMethod(this::func, "f");
    functionAcceptsMethod(this::func2, 0);
    // Explicit type specification
    functionAcceptsMethod<Float>(this::func3, 0f);
}
public void func(String s){
    System.out.println(s);
}
public void func2(int i){
    System.out.println(i);
}
public void func3(float f){
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM