class Depot
{
}
存储它们:
private final HashMap<Integer, Depot> depots;
depots = new HashMap<>();
我希望将它们归还:
public Depot[] getDepots()
{
if (depots.values().isEmpty())
{
return (Depot[]) new Object[0]; ***
}
else
{
return depots.values().toArray(new Depot[depots.values().size()-1]);
}
}
作为一个数组。现在,当没有仓库时,它们就是棘手的部分。首先,这一行depots.values().size()-1
失败了。 return (Depot[]) new Object[0]
;似乎没问题,但仍会触发异常:java.lang.ClassCastException:[Ljava.lang.Object; cannot be cast to [Depot;
答案 0 :(得分:2)
没有必要施放。只需首先创建一个Depot[]
:
public Depot[] getDepots()
{
if (depots.isEmpty())
{
return new Depot[0];
}
else
{
return depots.values().toArray(new Depot[depots.size()]);
}
}
另请注意,else子句中数组的长度应为depots.values().size()
(或depots.size()
),而不是depots.values().size() - 1
。如果将一个太小的数组传递给toArray()
,该方法将不会使用该数组,并且将创建一个新数组。