可调用<void>作为lambdas的函数接口</void>

时间:2014-06-24 07:59:30

标签: java lambda java-8 void callable

我刚学习新的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();
    }
}

如何解释这种行为?

1 个答案:

答案 0 :(得分:21)

对于Void方法(与void方法不同),您必须返回null

Void只是一个占位符,表明你实际上没有返回值(即使构造 - 就像Callable here - 需要一个)。编译器不会以任何特殊方式处理它,所以你仍然需要输入一个&#34; normal&#34;自己回复声明。