我正在实现我自己的地图,扩展了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()?