Ich lerne nur über neue Java8 Funktionen. Und hier ist meine Frage:Callable <Void> als funktionale Schnittstelle mit Lambdas
Warum ist es nicht erlaubt, als funktionale Schnittstelle für Lambda-Ausdrücke zu verwenden? (Compiler beklagt sich über Rückgabewert) Und es ist immer noch völlig legal Callable<Integer>
dort zu verwenden. Hier ist der Beispielcode:
public class Test {
public static void main(String[] args) throws Exception {
// works fine
testInt(() -> {
System.out.println("From testInt method");
return 1;
});
testVoid(() -> {
System.out.println("From testVoid method");
// error! can't return void?
});
}
public static void testInt(Callable<Integer> callable) throws Exception {
callable.call();
}
public static void testVoid(Callable<Void> callable) throws Exception {
callable.call();
}
}
Wie dieses Verhalten zu erklären?
könnten Sie hier nicht 'Runnable' verwenden, wenn Sie keinen Rückgabewert haben? (Ich bin noch nicht vertraut mit Java8) – Thilo
@Thilo: Ein Vorteil der Verwendung von Callable ist, dass es eine Zukunft zurückgibt, die später für andere Zwecke verwendet werden kann, z. B. das Löschen einer Aufgabe, die zu lange ausgeführt wird. – devdanke
Auch Callable kann unkontrollierte Ausnahme auslösen, während Runnable nicht kann – Greg