Sadece yeni java8 özelliklerini öğreniyorum. Ve benim sorum:Callable <Void> lambdas İşlevsel Arabirim olarak
Neden lambda ifadeleri için işlevsel bir arabirim olarak Callable<Void>
kullanmak için izin verilmiyor? (Derleyici değer döndürme hakkında şikayet ediyor) Ve hala orada Callable<Integer>
kullanmak için tamamen yasal.
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();
}
}
Nasıl bu davranışı açıklamak için: İşte örnek kod?
Dönüş değeri yoksa bunun yerine 'Runnable' kullanamazdınız mı? (Henüz Java8 ile aşina değilim) – Thilo
@Thilo: Callable'ı kullanmanın bir yararı, bir işi çok uzun süre öldürmek gibi, daha sonra başka amaçlar için kullanılabilecek bir Gelecek getirmesidir. – devdanke
Ayrıca Runbleable olamazken Callable denetlenmeyen bir istisna atabilir – Greg