【发布时间】:2014-07-18 07:33:01
【问题描述】:
我遇到了一些 lambda 问题。
我正在尝试使用 lambda 表达式和函数式接口来创建接受函数式接口和一些参数的方法并执行该函数。
这是我的代码:
@FunctionalInterface
interface TwoArgumentFunction {
public <T, K, V> T doJob(K arg1, V arg2);
} //I know I've ommited return value in that case
class SomeClass {
<T, K, V> T runLongAction(TwoArgumentFunction action, K arg1, V arg2){
SwingWorker<T, Void> worker = new SwingWorker<T, Void>(){
@Override
protected T doInBackground() throws Exception {
{... some code ... }
return action.doJob(arg1, arg2);
}
@Override
protected void done(){
{... some code ... }
}
};
worker.execute();
try {
return worker.get();
} catch (InterruptedException | ExecutionException e) {
{... some code ... }
}
}
void mainInvoke(ArgType1 arg1, ArgType2 arg2){
runLongAction((arg1, arg2) -> doSomething(arg1, arg2), arg1, arg2);
}
}
我有错误:
方法 runLongAction(( arg1, arg2) -> {}, ArgType1, ArgType2) 对于 SomeClass 类型未定义
我什至尝试将 lambda 转换为 TwoArgumentFunction 但后来我得到了:
非法的 lambda 表达式:TwoArgumentFunction 类型的方法 doJob 是通用的
Anonymous 类而不是 lambda 表达式可以正常工作,这是我找到的最简单的解决方法。
【问题讨论】:
-
TwoArgumentFunction和java.util.function.BiFunction一样吗?
标签: java generics lambda java-8