Ale klasa Sprawdz pewnie wypełnia tą listę i wpycha do niej coś co nie jest Stringiem.
@bogdans:
Rzutowanie jest już przy wyciąganiu, a nie dopiero przy przypisywaniu. Dlatego ten kod wyrzuci ClassCastException:
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List lista = new LinkedList();
lista.add(5);
List<String> listaGeneryczna = lista;
System.out.println(listaGeneryczna.get(0).toString());
}
}
Przy kompilacji z -Xlint:unchecked
dostaję takie komunikaty:
/home/piotrek/NetBeansProjects/IdeoneJava/src/Main.java:11: warning: [unchecked] unchecked call to add(E) as a member of the raw type List
lista.add(5);
where E is a type-variable:
E extends Object declared in interface List
/home/piotrek/NetBeansProjects/IdeoneJava/src/Main.java:12: warning: [unchecked] unchecked conversion
List<String> listaGeneryczna = lista;
required: List<String>
found: List
Dla przykładu ten kod:
class H<A> {
public A a;
}
class C1<A extends Number> {
void metoda(H<A> a) {
System.out.println(a.a.intValue());
}
}
class C2<A extends Double> {
void metoda(C1<A> c1, H<A> a) {
c1.metoda(a);
}
}
public class Main {
public static void main(String[] args) {
H h = new H();
h.a = "lol";
H<Double> hd = h;
new C2<Double>().metoda(new C1<Double>(), hd);
}
}
Wykłada się na rzutowaniu do Number, a nie do Double.