これらの2つの例は、Oracle Java 8 JDKを使用してコンパイルされません。Java8でバウンド・タイプのコンパイル・エラー
エラーは次のとおりです。
error: incompatible types: Object cannot be converted to Integer for (Integer i : foo.set)
例1)
import java.util.Set;
class Foo<T>
{
protected Set<Integer> set;
}
class Foo2 extends Foo
{
void doit()
{
for (Integer i : set)
{
}
}
}
例2)それはバグや機能
import java.util.Set;
class Foo<T>
{
public Set<Integer> set;
public static void main(String[] args)
{
Foo foo = new Foo();
for (Integer i : foo.set)
{
}
}
}
ですか?私が理解できるようにジェネリックスは、生のタイプの分野では機能しません。
、これはコンパイルん:あなたは、新しいインスタンスを作成するために、ジェネリック型を渡す必要があります= new Foo <>(); ' –
生の型を使用している可能性があります。すべての型情報が、そのすべてのフィールドに消去されています。 'Set'は 'Set'になります。 –
なぜ生の型を使用しますか? –