2016-05-01 14 views
0

次のコードは、Eclipse Lunaでエラーが発生し、実行を妨げています。私は瓶や実行などのファイルをパッケージ化するときJava Eclipseラムダ関数のエラー

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 

エラーで起こります。

ご指摘やご提案ありがとうございます。

+0

あなたのラムダ式は、それの体 –

答えて

2

3つのクエリメソッドは、JdbcTemplateにあります

query(String, ResultSetExtractor<T>); 
query(String, RowCallbackHandler); 
query(String, RowMapper<T>); 

3つのすべてでは、第二引数はラムダとして実装することができ、かつ汎用的な<T>パラメータを持っている二人は何かを返します。 Eclipseは、あなたが参照している最初のメソッドと3番目のメソッドの違いを知ることができないと訴えているので、ラムダが置き換えている機能インターフェイスのタイプを指定する必要があります。さらに、Jack Ammoによると、インタフェースを満足させるためにラムダからオブジェクトを返す必要があります。返されたオブジェクトをラムダ内のフォルダのリストに追加しないでください。だから、あなたはこのような何かを見ていると思います:

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; 
+0

感謝の最後にオブジェクトを返す必要があります! RowCallbackHandlerとしてキャストすると問題が解決しました。 – user2880771

2

the javadoc for ResultSetExtractorに従って、ラムダ式で実装する方法はObject extractData(ResultSet rs)です。 extractDataはObjectを返すので、ラムダはObjectを適切に実装するためにObjectを返さなければなりません。次のように

関連する問題