自动装箱和无效

Kel*_*ung 4 java generics autoboxing void

请注意如何Integer.TYPEInteger.classClass<Integer>,Double.TYPE并且Double.classClass<Double>,并使用自动装箱如何向之间转换intInteger以及doubleDouble.现在的问题是,这是否适用于真正void:Void.TYPEVoid.class都是Class<Void>,但你可以"转换"之间voidVoid

换句话说,假设你有这个界面:

public interface Foo<T> {
    public T doSomething();
}
Run Code Online (Sandbox Code Playgroud)

实现一类Foo<Integer>是自由返回int其实施的doSomething()作为int将被装箱.同样Foo<Double>回归double.所以,对于a Foo<Void>:因为Void允许的唯一值是null(除非你做了奇怪的反思,这很少被证明是合理的),这是否意味着你可以省略强制性return null,有效地"装箱"了Void

Jon*_*eet 11

这是否意味着你可以省略强制性返回null,有效地"装箱"虚空?

不.当然,这很容易为自己测试:

class Test {
    public Void foo() {
    }
}
Run Code Online (Sandbox Code Playgroud)

汇编给出:

Error: Test.java:3: missing return statement
    }
Run Code Online (Sandbox Code Playgroud)

...或者您可以阅读自动装箱上的JLS(第5.1.7节),其中没有提到Void任何地方.