4

Integer.TYPEInteger.classが 両方でありClass<Integer>Double.TYPEDouble.classが 両方であり、オートボクシングを使用してととClass<Double>の間で変換する方法に注意してください。問題は、これが:と両方に当てはまるかどうかですが、 と の間で「変換」できますか?intIntegerdoubleDoublevoidVoid.TYPEVoid.classClass<Void>voidVoid

別の言い方をすれば、次のインターフェースがあるとします。

public interface Foo<T> {
    public T doSomething();
}

を実装するクラスは、がボックス化されるため、 の実装で をFoo<Integer>自由に返すことができます。を返す場合も同様です。したがって、 a : の場合、許容される唯一の値は null であるため (ほとんど正当化されない奇妙なリフレクションを行わない限り)、これは必須の を省略して効果的に "ボクシング"できることを意味しますか?intdoSomething()intFoo<Double>doubleFoo<Void>Voidreturn nullVoid

4

1 に答える 1

11

これは、必須の return null を省略して、Void を効果的に「ボクシング」できるということですか?

いいえ。もちろん、これは自分で簡単にテストできます。

class Test {
    public Void foo() {
    }
}

コンパイルすると次のようになります。

Error: Test.java:3: missing return statement
    }

...または、どこにも言及されていないオートボクシングに関する JLS (セクション 5.1.7 ) を読むこともできます。Void

于 2012-09-13T05:30:16.527 に答える