ラムダ式を使用していくつかのテストを行っていますが、コードがコンパイルされません。私のラムダ実装は間違っていますか、それとも例外処理ですか? 次のコードの正しい実装は何ですか?
class MyObject { }
interface Creatable<T> {
T create() throws IOException;
}
/* Using the code: */
Creatable<MyObject> creator = () -> {
try {
return new MyObject();
} catch (IOException e) {
e.printStackTrace();
}
};
MyObject obj1 = creator.create();
try catch ブロックを削除し、メソッドでスローする例外を宣言すると、コードは正常にコンパイルおよび実行されます。
Creatable<MyObject> creator = () -> new MyObject();
コンパイルエラーは次のとおりです。
incompatible types: bad return type in lambda expression