Untuk mencegah ditutup sebagai duplikat, pertanyaan ini sangat berbeda dengan yang ini.
Anggap saja saya memiliki antarmuka berikut
@FunctionalInterface
interface FuncE0<R, E extends Exception> {
R call() throws E;
}
Ini berfungsi baik dengan lambda
FuncE0<Integer, IOException> get() {
return () -> 1;
}
Tetapi jika saya membiarkan antarmuka meluas dari Callable
, itu rusak.
@FunctionalInterface
interface FuncE0<R, E extends Exception> extends Callable<R> {
@Override
R call() throws E;
}
Dengan penggunaan yang sama. Complier memberi saya kesalahan berikut
JustTest.java:8: error: call() in <anonymous JustTest$> cannot implement call() in FuncE0
return () -> 1;
^ overridden method does not throw Exception
- Jika Anda menghapus metode override
R call() throws E
diFuncE0
, itu berhasil. - Jika Anda menggunakan kelas anonim, itu berfungsi.
- Jika Anda menggunakan gerhana, ECJ berfungsi.
Apa yang terjadi ketika saya mengganti pengecualian yang dilempar? Apakah ini bug javac?
Saya menggunakan jdk_1.8_112
Minimalkan kode untuk direproduksi
import java.io.IOException;
import java.util.concurrent.Callable;
public class JustTest {
public static FuncE0<Integer, IOException> get() {
return () -> 1;
}
@FunctionalInterface
public interface FuncE0<R, E extends Exception> extends Callable<R> {
@Override
R call() throws E;
}
}
java version "1.8.0_171"
itu berhasil - person Deadpool   schedule 13.08.2018