为什么Void类存在?

时间:2013-11-08 04:15:54

标签: java void

修改

这主要是为什么班级存在的问题,而不是班级的用法。问题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存在?

2 个答案:

答案 0 :(得分:2)

Reflection API需要表示void方法的返回类型,作为java.lang.reflect.Method.getReturnType().的结果(严格地说这是void.class,而不是Void.class,但编译器强制void.classVoid.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
  ...