在 java 中将 HashMap<k,v> 转换为 Array<v> 时出错
Error casting HashMap<k,v> to Array<v> in java
我遇到类型 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();
}
}
sList.toArray();
returns 一个 Object[]
。这不能转换为 Stuff[]
。您可以将数组转换为超类型数组,但不能转换为子类型数组。
可以得到一个Stuff[]
,就是有点别扭
this.stuffs = new Stuff[sList.size()];
sList.toArray(this.stuffs);
正如评论中指出的,您也可以这样做:
this.stuffs = sList.toArray(new Stuff[0]);
如果传递给toArray
的参数不够大,分配并返回一个相同类型的新数组。
我遇到类型 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();
}
}
sList.toArray();
returns 一个 Object[]
。这不能转换为 Stuff[]
。您可以将数组转换为超类型数组,但不能转换为子类型数组。
可以得到一个Stuff[]
,就是有点别扭
this.stuffs = new Stuff[sList.size()];
sList.toArray(this.stuffs);
正如评论中指出的,您也可以这样做:
this.stuffs = sList.toArray(new Stuff[0]);
如果传递给toArray
的参数不够大,分配并返回一个相同类型的新数组。