我刚学习新的java8功能。这是我的问题:
为什么不允许将Callable<Void>
用作lambda表达式的功能接口? (编译器抱怨返回值)
在那里使用Callable<Integer>
仍然是完全合法的。以下是示例代码:
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();
}
}
如何解释这种行为?
答案 0 :(得分:21)
对于Void
方法(与void
方法不同),您必须返回null
。
Void
只是一个占位符,表明你实际上没有返回值(即使构造 - 就像Callable here - 需要一个)。编译器不会以任何特殊方式处理它,所以你仍然需要输入一个&#34; normal&#34;自己回复声明。