我遇到了一些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是泛型的
使用匿名类而不是lambda表达式可以正常工作,这是我找到的最简单的解决方法。
TwoArgumentFunction
和java.util.function.BiFunction
是相同的吗? - gontard