java - 将函数作为参数传递给另一个类中的另一个函数
问题描述
我想将一个函数作为参数传递给另一个类中的另一个函数来执行它并返回它的返回值。以下示例代码显示了我想要做的事情。你能帮助我如何实现这一目标吗?
MyClass myClass = new MyClass();
myClass.myFunction( executeFunction( "name", 123 ) );
public long executeFunction( String a, Integer b ) {
//do something
return 321;
}
/* inside MyClass */
public <RetTyp> myFunction( /*accept any function as a parameter with RetTyp as a return data type*/) {
/*execute method coming in the argument and return its return value*/
}
解决方案
您可以定义自己的功能接口或使用BiFunction<T, U, R>
:
import java.util.*;
import java.util.function.*;
public class MyClass {
@FunctionalInterface
static interface MyFunction<R, T1, T2> {
R apply(T1 arg1, T2 arg2);
}
// static
public static <R, T1, T2> R myFunction(MyFunction<R, T1, T2> function, T1 arg1, T2 arg2) {
return function.apply(arg1, arg2);
}
// instance
public <T1, T2, R> R myBiFunction(BiFunction<T1, T2, R> function, T1 arg1, T2 arg2) {
return function.apply(arg1, arg2);
}
public static long executeFunction(String a, Integer b) {
System.out.println(a + ", b=" + b);
return 123L * a.length() * b;
}
public static void main(String args[]) {
System.out.println(myFunction(MyClass::executeFunction, "guess", 100));
System.out.println(myFunction((List<String> a, String b) -> a.indexOf(b), Arrays.asList("abc", "def", "xyz"), "opq"));
System.out.println(new MyClass().myBiFunction(MyClass::executeFunction, "bi", 999));
}
}
样本输出:
guess, b=100
61500
-1
bi, b=999
245754
推荐阅读
- mysql - 有外键时插入一行
- javascript - 有两个全宽 HTML 元素重叠但都是交互的
- php - 如何在 Composer 中处理 PHP 类的实用程序
- jboss - Wildfly 10 定期日志轮换
- angular - 使ckeditor不可编辑的参数?
- reactjs - 如何使用 React Jest 时间旅行到动画结束
- cassandra - Cassandra 3.11.2 列元数据
- javascript - 单击时获取元素“id”,然后激活相应的“兄弟”。JS & 姜戈
- wix - Wix bootsrapper 成功窗口上的复选框
- r - 在 mutate_at 中使用粘贴添加到列