修改
这主要是为什么班级存在的问题,而不是班级的用法。问题Uses for the Java Void Reference Type?侧重于实际的用法,这个问题要求其实施背后的原因。
Java为关键字返回类型void
提供了一个盒装类Void
。
来自文档:
Void类是一个不可实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用。
我看过这个课程的唯一情况是使用泛型,例如:
interface Foo<R> {
R foo();
}
Foo<Void> foo = new Foo<Void>(){
@Override
public Void foo() {
return null; // `return;` and `return void;` are syntax errors
}
}
这方面的一个例子是Android的AsyncTask
。
上述示例似乎毫无意义,因为该方法不返回void
,它将始终返回null
。
告诉我,为什么Void
存在?
答案 0 :(得分:2)
Reflection API需要表示void方法的返回类型,作为java.lang.reflect.Method.getReturnType().
的结果(严格地说这是void.class,
而不是Void.class,
但编译器强制void.class
至Void.TYPE
。)它也用于其他几个地方,如Use page in its Javadoc所示。
答案 1 :(得分:0)
Void是伪型无效支架
public static final Class<Void> TYPE = Class.getPrimitiveClass("void");
从1.1开始,还没有仿制药。当我们需要void.class时,例如这里
Class rt = Test1.class.getMethod("x").getReturnType();
if (rt == void.class) {
...
编译器使用对java.lang.Void.TYPE
的引用替换void.class ALOAD 1
GETSTATIC java/lang/Void.TYPE : Ljava/lang/Class;
IF_ACMPNE
...