以下がコンパイルされない理由が少し混乱しています。
public <E extends Object> E doSomething() {
return new Object();
}
私は問題を少し調査し、(E) へのキャストやクラス リテラルの使用などのさまざまな修正を見つけましたが、上記の実際の問題点はまだわかりません。
次の場合を除いて、 whileE
は常に type のインスタンスになり、 type のインスタンスになるObject
ことObject
はないため、機能しません。E
Object o = doSomething(); //If your code compiled, this call would work
それ以外の場合は、問題が発生します。投稿したコードのコンテキストでこの呼び出しを検討してください。
String s = doSomething();
Object
本当にString
. _ コンパイラは、実行時にこの状況に遭遇するのを防ぎます。
Object
シグネチャが を返すことを示し、が の任意のサブクラスでE
あると主張するメソッドでを返そうとしています。がサブクラスである場合、 はであると主張するのに十分ではありません。E
Object
E
Object
E