Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Java Eclipse Lambda函数错误_Java_Eclipse_Lambda - Fatal编程技术网

Java Eclipse Lambda函数错误

Java Eclipse Lambda函数错误,java,eclipse,lambda,Java,Eclipse,Lambda,下面的代码在EclipseLuna中为我生成一个错误并阻止运行 jdbcTemplate.query( query, r -> { Folder folder = new Folder(); folder.setId(r.getLong("id")); folder.setFolderName(r.getString("folder_name")); folder.setFullPath(r.getString("fu

下面的代码在EclipseLuna中为我生成一个错误并阻止运行

    jdbcTemplate.query( query, r -> {
        Folder folder = new Folder();
        folder.setId(r.getLong("id"));
        folder.setFolderName(r.getString("folder_name"));
        folder.setFullPath(r.getString("full_path"));
        folders.add(folder);
    }, folderId);

    return folders;
}
错误发生在jdbcTemplate.query上

The method query(String, ResultSetExtractor<Object>, Object[]) is ambiguous for the type JdbcTemplate
方法查询(String、ResultSetTextRactor、Object[])对于JdbcTemplate类型不明确
将文件打包为jar并运行时不会发生错误


感谢您的指导或建议。

根据,您使用lambda表达式实现的方法是
对象提取数据(ResultSet rs)
。extractData返回一个对象,因此lambda也必须返回一个对象才能正确实现它。

根据,使用lambda表达式实现的方法是
对象extractData(ResultSet rs)
。extractData返回一个对象,因此您的lambda也必须返回一个对象才能正确实现它。

JdbcTemplate中有三种查询方法,如下所示:

query(String, ResultSetExtractor<T>);
query(String, RowCallbackHandler);
query(String, RowMapper<T>);
查询(字符串、ResultSetExtractor);
查询(字符串、RowCallbackHandler);
查询(字符串、行映射器);
在这三个参数中,第二个参数可以实现为lambda,而具有泛型
参数的两个参数将返回一些内容。Eclipse抱怨说,它无法区分所引用的第一个方法和第三个方法之间的区别,因此需要指定lambda要替换的函数接口的类型。另外,正如jackammo所说,您需要从lambda返回一个对象来满足接口。也不要将返回的对象添加到lambda中的文件夹列表中。所以,你会看到这样的情况:

Folder folder = jdbcTemplate.query( query, (ResultSetExtractor<Folder>) r -> {
    Folder folder = new Folder();
    folder.setId(r.getLong("id"));
    folder.setFolderName(r.getString("folder_name"));
    folder.setFullPath(r.getString("full_path"));
    return folder;
}, folderId);

folders.add(folder);

return folders;
Folder Folder=jdbcTemplate.query(query,(ResultSetExtractor)r->{
文件夹=新文件夹();
folder.setId(r.getLong(“id”);
folder.setFolderName(r.getString(“folder_name”);
folder.setFullPath(r.getString(“full_path”);
返回文件夹;
},folderId);
文件夹。添加(文件夹);
返回文件夹;

JdbcTemplate中有三种查询方法,如下所示:

query(String, ResultSetExtractor<T>);
query(String, RowCallbackHandler);
query(String, RowMapper<T>);
查询(字符串、ResultSetExtractor);
查询(字符串、RowCallbackHandler);
查询(字符串、行映射器);
在这三个参数中,第二个参数可以实现为lambda,而具有泛型
参数的两个参数将返回一些内容。Eclipse抱怨说,它无法区分所引用的第一个方法和第三个方法之间的区别,因此需要指定lambda要替换的函数接口的类型。另外,正如jackammo所说,您需要从lambda返回一个对象来满足接口。也不要将返回的对象添加到lambda中的文件夹列表中。所以,你会看到这样的情况:

Folder folder = jdbcTemplate.query( query, (ResultSetExtractor<Folder>) r -> {
    Folder folder = new Folder();
    folder.setId(r.getLong("id"));
    folder.setFolderName(r.getString("folder_name"));
    folder.setFullPath(r.getString("full_path"));
    return folder;
}, folderId);

folders.add(folder);

return folders;
Folder Folder=jdbcTemplate.query(query,(ResultSetExtractor)r->{
文件夹=新文件夹();
folder.setId(r.getLong(“id”);
folder.setFolderName(r.getString(“folder_name”);
folder.setFullPath(r.getString(“full_path”);
返回文件夹;
},folderId);
文件夹。添加(文件夹);
返回文件夹;

您的lambda表达式需要在其主体末尾返回一个对象您的lambda表达式需要在其主体末尾返回一个对象谢谢!扮演RowCallbackHandler解决了这个问题。谢谢!强制转换为RowCallbackHandler解决了这个问题。