Дженерики Java WildCard: <? расширяется Число> по сравнению с <T расширяет Число>

Каково различие между этими 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);
    }
}

Я вижу тот же вывод.

62
задан 24 March 2016 в 13:17

1 ответ

При использовании 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);
}
-1
ответ дан 31 October 2019 в 14:18

Другие вопросы по тегам:

Похожие вопросы: