Ich habe diesen Code:Java Generics: Mehrere Bounds
public class Test {
public static void main(String[] args) {
Test t = new Test();
t.callTest();
}
public void callTest() {
GenericTest gt = new GenericTest<Date>(); // this line don't compile
gt.test(new Date());
}
class GenericTest<T extends Date & List> {
T x;
public void test(T y) {
System.out.println(x.toString());
}
}
}
Ich verstehe, warum new GenericTest<Date>()
nicht kompilieren, ist es, weil Datum nicht Liste Schnittstelle nicht implementiert, aber wenn ich instanziiert GenericTest gt = new GenericTest()
ohne Generika, die gesamte Code funktioniert, und ich verstehe nicht warum. Der Methodentest erwartet (T y)
wo T extends Date
und implementiert List
, aber es funktioniert mit gt.test(new Date())
.
Sind die Grenzen wirklich wichtig, wenn Sie rohe Typen verwenden? – CKing
Ja, sie spielen eine Rolle. Wenn Sie nur '' (d. H. Type-Parameter ohne Grenzen) haben, wird die Ersetzung "Object" sein. Wenn Sie jedoch '' haben, lautet die Ersetzung "Number". –
Sie haben Recht. Die erste Grenze wird angewendet. Habe es einfach ausprobiert. +1 – CKing