79343863

Date: 2025-01-09 19:51:48
Score: 1.5
Natty:
Report link

First, you may already know, but for others: Using raw types is bad. We shouldn’t. Meaning we don’t need to know the answer to your question.

Curiosity doesn’t quite kill this cat, though, so for its sake: Once you use a raw type, everything in the expression goes raw. So when you pass a raw HashMap to doSometing(), it returns a raw List, not the List<B> that it’s declared to return. And Java accepts that you assign a raw List to a List<A>. With a warning. But you’re expected to know best, if you say that the list can be regarded as a List<A>, so be it.

In you last code line you haven’t got any raw types, so generics work the way they are supposed to. doSomething() returns a List<B>. And you cannot assign a List<B> to a List<A>. Why? Because a List<A> would allow you to insert something into the list that implements A but is not a B. We cannot allow that to happen for a List<B>.

Link: What is PECS (Producer Extends Consumer Super)? about why you can’t assign a List<B> to a List<A> and what to do instead.

Reasons:
  • Blacklisted phrase (0.5): Why?
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Contains question mark (0.5):
  • Unregistered user (0.5):
  • Low reputation (1):
Posted by: Tarita Kim