对象被强制转换为适当的值会导致classcastException

时间:2019-05-21 20:53:45

标签: java generics classcastexception

我正在实现我自己的地图,扩展了HashMap,可将操作转发到侦听器。

将事件转发给侦听器时,它解析键和删除的值,但是,我得到的ClassCastException Object []无法转换为String []

当前,我使用以下方法重写HashMap的clear()方法。 我知道地图和侦听器都具有通用参数M,K,V,所以这不是问题。

        K[] keys = (K[]) keySet().toArray();
        V[] vals = (V[]) this.values().toArray();
        super.clear();
            Iterator<IMapChangeListener<M, K, V>> it = listeners.iterator();
            while (it.hasNext())
            {
                IMapChangeListener<M, K, V> v = it.next();
                //this line throws the ClassCastException
                v.mapClear(mapKey, keys, vals);
            }

我了解为什么会这样,(this.values()。toArray())没有参数,所以它创建了一个Object而不是V的数组,而如果我这样做了,则创建this.values()。toArray(新的V [0])(如果我知道V在编译时是什么),但我当然不知道。

是否有解决方案,不涉及将类类型解析为toArray()?

0 个答案:

没有答案