我遇到类型cas错误的问题,我无法找出它为什么会弹出...
错误消息:[Ljava.lang.Object; cannot be cast to [Lnet.masterthought.cucumber.json.Stuff;
它弹出this.stuffs = (Stuff[]) sList.toArray();
任何人都知道这是什么问题?
public class Element {
private Stuff[] stuff;
//... getters setters
public function updateStuff(Stuff[] newStuff) {
Map<String, Stuff> stuffMap = new HashMap<String, Stuff>();
for (Stuff s : this.stuffs) {
stuffMap.put(s.getName(), s);
}
for (Stuff s : prevStuffs) {
if (stuffMap.containsKey(s.getName())) {
stuffMap.get(s.getName()).setValue(s.getValue());
}
}
ArrayList<Stuff> sList = new ArrayList<Stuff>(stuffMap.values());
this.stuffs = (Stuff[]) sList.toArray();
}
}
答案 0 :(得分:3)
sList.toArray();
会返回Object[]
。这不能成为Stuff[]
的强制转换。您可以将数组转换为超类型的数组,但不能转换为子类型。
你可以得到一个Stuff[]
,但这有点尴尬。
this.stuffs = new Stuff[sList.size()];
sList.toArray(this.stuffs);
正如评论中所指出的,你也可以这样做:
this.stuffs = sList.toArray(new Stuff[0]);
如果传递给toArray
的参数不够大,则会分配并返回相同类型的新数组。