This week's book giveaway is in the OCAJP forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide 1Z0-808 and have Jeanne Boyarsky & Scott Selikoff on-line! See this thread for details.
The generic type T is defined as: T extends List<? extends Number>
So, type T is a List of some unknown type (indicated by the question mark) that extends Number. You can't add a Long to such a list, because you don't know what the unknown type is. Suppose that someone uses this on a List<Double>. Ofcourse it shouldn't be possible to add a Long to a List<Double>.
If you want to be able to add a Long, then you can change the first line to this: