I'm new to Java so I'm probably doing something wrong here, I want to create an array of Sets and I get an error (from Eclipse). I have a class:
public class Recipient { String name; String phoneNumber; public Recipient(String nameToSet, String phoneNumberToSet) { name = nameToSet; phoneNumber = phoneNumberToSet; } void setName(String nameToSet) { name = nameToSet; } void setPhoneNumber(String phoneNumberToSet) { phoneNumber = phoneNumberToSet; } String getName() { return name; } String getPhoneNumber() { return phoneNumber; } } and I'm trying to create an array:
Set<Recipient>[] groupMembers = new TreeSet<Recipient>[100]; The error I get is "Cannot create a generic array of TreeSet"
What is wrong ?
23 Answers
you cannot instantiate an array of a generic type (
new List<String>[3]is illegal), unless the type argument is an unbounded wildcard (new List<?>[3]is legal).
Rather than using an array, you can use an ArrayList:
List<Set<Recipient>> groupMembers = new ArrayList<Set<Recipient>>(); The code above creates an empty ArrayList of Set<Recipient> objects. You would still have to instantiate every Set<Recipient> object that you put into the ArrayList.
Arrays don't support Generics. Use an ArrayList:
ArrayList<Set<Recipient>> groupMembers = new ArrayList<Set<Recipient>>(); You might want to consider using Guava's Multimap where the key is the index. This will handle creating the Sets for each index as you need them.
SetMultimap<Integer, Recipient> groupMembers;