Java Void类型 - 可能/允许的值?

pet*_*rov 5 java void

1)在Java中,我可以这样做:

Void z = null;
Run Code Online (Sandbox Code Playgroud)

除了null我可以指定之外还有其他值z吗?

2)考虑以下代码剪切:

Callable<Void> v = () -> {
    System.out.println("zzz"); 
    Thread.sleep(1000);
    return null;
}; 
Run Code Online (Sandbox Code Playgroud)

这编译好了,但是如果我删除最后一个语句return null;则没有.为什么?毕竟,Void应该意味着没有回报价值.

Men*_*ena 8

来自文档:

Void类是一个不可实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用.

所以,没有.

Void 由必须返回一个对象的方法使用,但实际上什么也没有返回.

在任务完成后您不需要返回任何对象的情况下,可以通过在Android中使用AsyncTask来观察到一个不错的示例.

然后你会扩展AsyncTask<[your params type], [your progress type], Void>,并null在你的onPostExecute覆盖中返回.

在大多数情况下你不需要它(例如,Runnable通常比它更合适Callable<Void>).

更具体地回答您的问题:

但是,如果我删除返回null它不编译?!为什么?

...因为a Void仍然是一个对象.但是,它只能有价值null.

如果你的方法声明它返回Void,你需要(显式)返回null.