私はクラスがある場合:私は別のクラスからそのメソッドを使用しようとするとJavaジェネリックの未加工クラスは、型パラメータが指定されていないときにジェネリックをすべて消去するのはなぜですか?
public class GenericClass<TBlah extends Number> {
public List<String> getList() {
return null;
}
}
を:私はへのループのために上の行を変更するまで
public class OtherClass {
public void test() {
GenericClass a = null;
for (String s : a.getList()) {
}
}
}
なぜa.getList()
List<Object>
を返すん。
GenericClass<Number> a = null;
その時点a.getListで、()、それが何をすべきようなList<String>
を返しますか?
編集:getList()
で指定された契約が、変数「a」をどのように宣言するかによって、なぜ影響を受けるのか分かりません。 getList()
は常にList<String>
を返しますが、それは何でも問題ありませんTBlahです。
なぜ、それを「ヌル」に初期化するのですか? – fge
@fgeシンプルさ。私が思う問題とは無関係です。 – Xenoprimate
これは、JLSの作家が選択したものですから。 AFAIK、理由は、あなたが生の型を使用する場合、あなたはジェネリック型を気にしないということです。解決策は、生の型の使用を避けることです。 –