The bound is just a overly-broad because it's as close as you can express using Java's generics.
What you really want is <the immediate superclass of T>
; but there's no way to write that in Java's generics. There's also no way to write <? super T excluding T>
. <? super T>
is pretty much as specific as you can get given the way Java's generics work.
For what it's worth you can guarantee that the class you get back will be the superclass in question -- no matter what its type bound is.