Thanks for replies, sure I have to read more about java generics. However, with my simple example (giveMeNumber) I was trying to tell that I figured out the "problem I had about why I 'need' explicit cast (Integer is subtype of Number after all)". The problem manifastes (with such example) if it is "misused" by the client (expecting giveMeNumber to return Long). Of course, such method should not exist in the first place, to be "misused" by the client. Somehow I didn't realize earlier on that I can assign the return value directly to ANY
subclass of Number (not just into Number). (as you said "I am also a bit surprised that you got your line 3 to compile")
Also, I'm grateful for examples you are giving here, it helps me to figure out the "missing pieces"
My original issue could be fixed with figuring out the actual implementing class of my interface, passing that type parameter to all methods involved and then finally casting my interface implementation instances to the correct instance. (Actually, my original issue wasn't about combining lists, just generating list of objects of single type of interface)
So, thanks again for help, my text is quite confusing, but my "issue" is resolved