Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Lambda表达式在构造函数中定义带参数的可调用函数_Lambda_Java 8_Callable - Fatal编程技术网

使用Lambda表达式在构造函数中定义带参数的可调用函数

使用Lambda表达式在构造函数中定义带参数的可调用函数,lambda,java-8,callable,Lambda,Java 8,Callable,我正在尝试使用Lambda表达式重写以下可调用实现: public class NLQueryTask implements Callable<NLQuery> { private String questionText, languageTranslationModelId; public NLQueryTask(String questionText, String languageTranslationModelId) { this.q

我正在尝试使用Lambda表达式重写以下可调用实现:

    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 {...}
Callable<Integer> task = (String questionText, languageTranslationModelId) -> {...
公共类NLQueryTask实现可调用{
私有字符串questionText,languageTranslationModelId;
公共NLQueryTask(字符串questionText,字符串语言TranslationModelId){
this.questionText=questionText;
this.languageTranslationModelId=languageTranslationModelId;
}
@凌驾
公共NLQuery调用()引发异常{…}
如果尝试在Lambda表达式中包含参数,则会出现编译器错误:

    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 {...}
Callable<Integer> task = (String questionText, languageTranslationModelId) -> {...
Callable task=(String questionText,languageTranslationModelId)->{。。。
显然,我遗漏了一些东西(我今天开始阅读Lambda表达式)。我应该如何定义Lambda表达式,使其不使用默认的可调用构造函数(无参数),而是使用例程需要的参数


感谢

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
};
String questionText=“一些文本”;
字符串语言translationmodelid=“1234”;
可调用任务=()->{
System.out.println(问题文本);
返回Integer.parseInt(languageTranslationModelId);//随便什么
};

显然,捕获的局部变量必须是有效的
final

可调用函数在调用时不带任何参数,即它有一个方法
call()
,如果您想在创建可调用函数时使用可用的值,您只需引用它们,它们就会被捕获。