在下面的代码中,我期望 pn.get(8).get(8)
返回一个 Integers
数组(在这个例子中,数组的长度是 1,但在我的程序中它更长)。相反,我得到了一组 Objects
。
谁能告诉我为什么以及我做错了什么。
ArrayList<ArrayList<HashSet<Integer>>> pn =
new ArrayList<ArrayList<HashSet<Integer>>>();
for (int x = 0; x < 9; x++)
{
pn.add(x, new ArrayList<HashSet<Integer>>());
for (int y = 0; y < 9; y++) {
pn.get(x).add(y, new HashSet<Integer>());
pn.get(x).get(y).add(new Integer(x));
}
}
for (Integer i: pn.get(8).get(8).toArray())
{
System.out.println(i);
}
最佳答案
您需要做的就是删除 for
语句中的 toArray()
调用,它返回 Object[]
而不是 Integer[]
如您所料。这是 Java implements generics using type erasure 的 Artifact .运行时,JVM 不知道你的 HashSet
是 Integer
类型,所以 toArray()
必须返回一个数组 对象[]
。
值得庆幸的是,HashSet
可以直接迭代,因此不需要调用 toArray()
。以下对我有用:
ArrayList<ArrayList<HashSet<Integer>>> pn = new ArrayList<ArrayList<HashSet<Integer>>>();
for (int x = 0; x < 9; x++)
{
pn.add(x, new ArrayList<HashSet<Integer>>());
for (int y = 0; y < 9; y++) {
pn.get(x).add(y, new HashSet<Integer>());
pn.get(x).get(y).add(new Integer(x));
}
}
for (Integer i: pn.get(8).get(8))
{
System.out.println(i);
}
关于java - HashSet "cannot convert from element type Object to Integer"期望整数的 HashSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16079525/