> main advantage is the ability to assign to List<J> variable. Not sure I see the distinction - the same thing applies to setListData(List<?>).
> if we use List<?> as the return type, this can be done with cast, but if we > use List<Object> as return type, cast cannot be applied also. Right, I had forgotten about that. That's why it currently returns List<?>. Returning List<T> would simply make the cast unnecessary.
