【问题标题】:Error casting HashMap<k,v> to Array<v> in java [duplicate]在 java 中将 HashMap<k,v> 转换为 Array<v> 时出错 [重复]
【发布时间】:2015-03-31 21:29:00
【问题描述】:

我遇到了类型 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();
    }
}

【问题讨论】:

    标签: java casting hashmap


    【解决方案1】:

    sList.toArray(); 返回一个Object[]。这不能转换为Stuff[]。您可以将数组转换为超类型的数组,但不能转换为子类型。

    你可以得到Stuff[],但是有点别扭。

    this.stuffs = new Stuff[sList.size()];
    sList.toArray(this.stuffs);
    

    正如 cmets 中指出的,您也可以这样做:

    this.stuffs = sList.toArray(new Stuff[0]);
    

    如果传递给toArray 的参数不够大,则分配并返回一个相同类型的新数组。

    【讨论】:

    • 或更简单的:sList.toArray(new Stuff[0]);
    • @assylias 谢谢。我不知道你能做到这一点。 toArray API 完全是狗的早餐。
    猜你喜欢
    • 2013-04-13
    • 1970-01-01
    • 2019-01-23
    • 2018-11-23
    • 2015-09-26
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多