我是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的通用数组”
怎么了?
5条答案
按热度按时间3j86kqsm1#
从http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html:
你不能示例化一个泛型类型的数组(
new List<String>[3]
是非法的),除非类型参数是一个无界的数组(new List<?>[3]
是合法的)。你可以使用
ArrayList
而不是使用数组:字符串
上面的代码创建了一个包含
Set<Recipient>
对象的空ArrayList
。您仍然需要示例化您放入ArrayList
中的每个Set<Recipient>
对象。ipakzgxi2#
数组不支持泛型。请使用
ArrayList
:字符串
tzxcd3kk3#
你可能想考虑使用Guava的Multimap,其中键是索引。这将在你需要的时候为每个索引创建集合。
SetMultimap
字符串
pb3skfrl4#
在这种特定情况下,组的数量是可变的,使用ArrayList或其他集合类型而不是数组当然更好。
但如果出于某种原因,你确实需要一个大小为100的数组,你可以这样做:
字符串
你不应该创建一个
TreeSet<?>[]
并把它赋值给一个Set<?>[]
,因为这不是类型安全的。编译器允许在数组中存储一个HashSet
,但在运行时它会被拒绝,并出现异常。请注意,此时数组仍然为空,需要创建实际的Set:
型
lpwwtiir5#
首先,你的语法不正确;其次,你的类必须实现Comparable接口,或者在为每个
TreeSet<>
赋值时传递一个Comparator。Comparable<T>
接口,并根据名称进行排序。Comparator
对电话号码进行排序。字符串
打印(第一组按姓名排序,下一组按电话号码排序)
型