java.lang.Void vs void vs Null

2022-09-02 05:04:22

和 之间到底有什么区别,我可以改用吗?Voidvoidnull

我问这是因为我正在查看示例Android代码,他们使用了Void,但Eclipse错误(它说)。Void cannot be resolved to a variable

我的代码中断是

public class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{
    ...
}

我这样使用它

MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute((Void),null);//this is the line that breaks  "Void cannot be resolved to a variable"

答案 1

Void最常见的用途是用于反射,但这不是唯一可以使用它的地方。

void是一个关键字,表示函数不生成值。

java.lang.Void是引用类型,则以下内容有效:

 Void nil = null;

(到目前为止,这并不有趣...)

作为结果类型(返回值为 type 的函数),它意味着函数 *always * 返回(它不能返回 除 以外的任何内容,因为没有实例)。VoidnullnullVoid

 Void function(int a, int b) {
    //do something
    return null;
 }

为什么我想要一个总是返回 null 的函数?

在泛型发明之前,我没有.Void

对于泛型,有一些有趣的情况。例如,Future<T>是其他线程执行的异步操作结果的持有者。 将返回操作值(类型),并将阻塞,直到执行计算。Future.getT

但。。。如果没有什么可返回的怎么办?简单:使用 .例如,在 Google App Engine 中,异步数据存储服务删除操作返回 .何时在该将来调用,则在删除完成后返回。可以用 Callables 写一个类似的例子。Future<Void>Future<Void>get()null

另一个用例是 无值,即 .这样的映射表现得像一个,那么当没有等效的实现时,它可能是有用的(例如,没有,那么可以使用WeakHashMap<T,Void>)。MapMap<T,Void>Set<T>SetWeakHashSet


答案 2

Void是“一个无法证实的占位符类,用于保存对表示 Java 关键字 void 的 Class 对象的引用。(由 http://docs.oracle.com/javase/6/docs/api/java/lang/Void.html)

void是表示不返回的返回类型。

null是价值的缺失。