![](/img/trans.png)
[英]How to access method parameters while inside of a Runnable defined on the fly
[英]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.