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: