在 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的参数不够大,分配并返回一个相同类型的新数组。