Каково различие между этими 2 функциями?
static void gPrint(List<? extends Number> l) {
for (Number n : l) {
System.out.println(n);
}
}
static <T extends Number> void gPrintA(List<T> l) {
for (Number n : l) {
System.out.println(n);
}
}
Я вижу тот же вывод.
При использовании T, можно выполнить весь тип действий со Списком. Но то, когда Вы используете Вас, не может работать, добавляют.
T - как то же как ссылка на объект с полным доступом
? - предоставляют частичный доступ
static void gPrint(List<? extends Number> l) {
l.add(1); //Will give error
for (Number n : l) {
System.out.println(n);
}
static <T extends Number> void gPrintA(List<T> l) {
l.add((T)1); //We can add
for (Number n : l) {
System.out.println(n);
}