Diese beiden Beispiele kompilieren nicht mit Oracle Java 8 JDK.Bounded Type Kompilierfehler in Java8
Der Fehler ist:
error: incompatible types: Object cannot be converted to Integer for (Integer i : foo.set)
Beispiel 1)
import java.util.Set;
class Foo<T>
{
protected Set<Integer> set;
}
class Foo2 extends Foo
{
void doit()
{
for (Integer i : set)
{
}
}
}
Beispiel 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)
{
}
}
}
Ist es Bug oder Feature? Wie ich verstehen kann, arbeiten Generika nicht in Feldern vom Rohtyp.
Merkwürdigerweise dies nicht kompiliert, wenn Sie 'foo' als typisierte Objekt konstruieren, auch wenn es nicht als 'Integer' eingegeben wird - sagen wir,' Foo foo = new Foo <>(); ' –
Es ist möglich, weil Sie einen unformatierten Typ verwenden, alle Typinformationen werden in allen enthaltenen Feldern gelöscht, z 'Set' wird 'Set'. –
Warum verwenden Sie rohe Typen? –