У меня есть этот код:Java Дженерики: Несколько 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());
}
}
}
Я понимаю, почему new GenericTest<Date>()
не компилируется, это потому, что дата не реализует интерфейс List, но если я создаю экземпляр GenericTest gt = new GenericTest()
без родового, в целом код работает, и я не понимаю, почему. Тест метода ожидает (T y)
, где T extends Date
и реализует List
, но он работает с gt.test(new Date())
.
Действительно ли границы имеют значение при использовании необработанных типов? – CKing
Да, они имеют значение. Если у вас есть только '' (то есть параметр типа без ограничений), то заменой будет 'Object', однако если у вас' 'T extends Number>', то заменой будет 'Number'. –
Вы правы. Применяется первая граница. Просто попробовал. +1 – CKing