Alex Rivera | Logout

Java Generics WildCard: <? extends Number> vs <T extends Number>

Asked 2012-07-16T01:05:14.763
93

What is the difference between these 2 functions?

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);
    }
}

I see the same output.

Edit
Report

1 Answer

50

The difference is you can't refer to T when using a wildcard.

You aren't right now, so there is "no difference", but here's how you could use T to make a difference:

static <T extends Number> T getElement(List<T> l) {
    for (T t : l) {
        if (some condition)
            return t;
    }
    return null;
}

This will return the same type as whatever is passed in. eg these will both compile:

Integer x = getElement(integerList);
Float y = getElement(floatList);
answered 2012-07-16T01:15:43.660

Your Answer