T is type safe. Take example:
Quote
public static <T extends Number> void copy(List<T> dest, List<T> src)
In that case you will have parameters and method return of a same type(at least of same Number abstraction)
In case of using "?" wildcard you are no longer type safe. Example:
Quote
public static void foo(List<? extends Number> dest, List<? extends Number> src)
You can pass dest type Integer, src type Float.
Use wildcard when you need no boundries on parameter types, no relation on them.