Я реализую свою собственную карту, расширяющую HashMap, который перенаправляет операции на слушателей.
При пересылке событий слушателям он анализирует удаленные ключи и значения, однако я получаю объект ClassCastException [], который не может быть приведен к String []
В настоящее время я переопределяю метод clear () HashMap следующим образом.
Я знаю, что и карта, и слушатель имеют общие параметры 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 ()) не имеет параметра, поэтому он создает массив объектов, а не V, тогда как если бы я сделал это .values (). ToArray ( new V [0]) (если бы я знал, что V было во время компиляции), но, конечно, я не знаю.
Есть ли решение для этого, которое не включает синтаксический анализ типа класса toArray ()?