我正在尝试使用Lambda表达式重写以下Callable实现:
public class NLQueryTask implements Callable<NLQuery> {
private String questionText, languageTranslationModelId;
public NLQueryTask(String questionText, String languageTranslationModelId) {
this.questionText = questionText;
this.languageTranslationModelId = languageTranslationModelId;
}
@Override
public NLQuery call() throws Exception {...}
如果我尝试在Lambda表达式中包含参数,则会出现编译器错误:
Callable<Integer> task = (String questionText, languageTranslationModelId) -> {...
显然我错过了一些东西(我今天开始阅读有关Lambda表达式的内容)。我应该如何定义Lambda表达式,以便它不使用默认的Callable构造函数(没有参数),而是使用我的例程需要的参数?
由于
答案 0 :(得分:3)
lambda表达式在目标接口中的单个抽象方法之后建模,在这种情况下为Callable#call()
。此方法具有空参数列表。 lambda表达式的参数列表也必须为空。
您可以捕获您作为参数传递给lambda正文中的NLQueryTask
构造函数的值。
String questionText = "some text";
String languageTranslationModelId = "1234";
Callable<Integer> task = () -> {
System.out.println(questionText);
return Integer.parseInt(languageTranslationModelId); // whatever
};
显然,捕获的局部变量必须有效final
。