0

以下がコンパイルされない理由が少し混乱しています。

public <E extends Object> E doSomething() {
    return new Object();
}

私は問題を少し調査し、(E) へのキャストやクラス リテラルの使用などのさまざまな修正を見つけましたが、上記の実際の問題点はまだわかりません。

4

2 に答える 2

5

次の場合を除いて、 whileEは常に type のインスタンスになり、 type のインスタンスになるObjectことObjectはないため、機能しません。E

Object o = doSomething();  //If your code compiled, this call would work

それ以外の場合は、問題が発生します。投稿したコードのコンテキストでこの呼び出しを検討してください。

String s = doSomething();

Object本当にString. _ コンパイラは、実行時にこの状況に遭遇するのを防ぎます。

于 2013-09-17T19:12:42.830 に答える
1

Objectシグネチャが を返すことを示し、が の任意のサブクラスでEあると主張するメソッドでを返そうとしています。がサブクラスである場合、 はであると主張するのに十分ではありません。EObjectEObjectE

于 2013-09-17T19:08:48.193 に答える