Объект, приведенный к его правильному значению, вызывает classcastexception - PullRequest
0 голосов
/ 21 мая 2019

Я реализую свою собственную карту, расширяющую 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 ()?

...