I have a question about Java Generics and Collections. It was considered good practice to declare the collection as follows:
List<String> catNames = new ArrayList<String>();
because you can change the type of List and not worry about breaking the rest of your code. But when I try to do this:
private static Map<IssueType, List<Issue>> orphanedAttrMap = new HashMap<IssueType, ArrayList<Issue>>();
javac complains
Type mismatch: cannot convert from HashMap<ResultsAggregator.IssueType,ArrayList<Issue>> to HashMap<ResultsAggregator.IssueType,List<Issue>>
In addition, it is completely legal:
private static Map<IssueType, List<Issue>> orphanedAttrMap = new HashMap<IssueType, List<Issue>>();
which seems even more confusing because List is an interface, not a concrete class. What's going on here? Is this a type erase problem?
source share