问题 在Java中创建集合数组


我是Java的新手,所以我可能在这里做错了, 我想创建一个Sets数组,我得到一个错误(来自Eclipse)。 我上课了:

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;
}
}

我正在尝试创建一个数组:

Set<Recipient>[] groupMembers = new TreeSet<Recipient>[100]; 

我得到的错误是“无法创建TreeSet的通用数组”

哪里不对 ?


6047
2017-11-03 17:23


起源

以下问题可能会有所帮助。 [stackoverflow.com/questions/529085/...        [1]: stackoverflow.com/questions/529085/... - Upul Bandara
我只是好奇:为什么你需要一组数组呢? - javagirl


答案:


http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html

你无法实例化泛型类型的数组(new List<String>[3] 是非法的),除非type参数是一个无界的通配符(new List<?>[3] 是合法的)。

您可以使用。而不是使用数组 ArrayList

List<Set<Recipient>> groupMembers = new ArrayList<Set<Recipient>>();

上面的代码创建一个空的 ArrayList 的 Set<Recipient> 对象。你仍然需要实例化每一个 Set<Recipient> 你放入的对象 ArrayList


14
2017-11-03 17:28



我不明白答案的第一部分:你写的List [3]既合法又非法。 “无界通配符”是什么意思? - Belgi
道歉,stackoverflow正在解释泛型(例如 <String>)作为HTML标签。我已修复格式。 - Mansoor Siddiqui
谢谢。我认为你在<Set <Recipient>中缺少了>,但这是一个非常好的答案。 +1 - Belgi
我做了你指出的修复。感谢您的反馈! - Mansoor Siddiqui


数组不支持泛型。用一个 ArrayList

ArrayList<Set<Recipient>> groupMembers = new ArrayList<Set<Recipient>>();

0
2017-11-03 17:29





您可能需要考虑使用Guava的Multimap,其中键是索引。这将根据您的需要处理为每个索引创建集合。

SetMultimap

SetMultimap<Integer, Recipient> groupMembers;

0
2017-11-03 17:33