#java
Использую библиотеку с открытым кодом JGraphX (http://www.jgraph.com/) для визуализации графов. Возникла такая проблема, при попытке экспорта модели в XML-файл возникает ошибка : java.lang.ClassCastException: [F cannot be cast to [Ljava.lang.Object. Я нашёл место в коде библиотеки, где эта ошибка генерится: /** * Encodes the child objects of arrays, maps and collections. * * @param enc Codec that controls the encoding process. * @param obj Object whose child objects should be encoded. * @param node XML node that contains the encoded object. */ protected void encodeElements(mxCodec enc, Object obj, Node node) { if (obj.getClass().isArray()) { Object[] tmp = (Object[]) obj; // Здесь всё рушиться for (int i = 0; i < tmp.length; i++) { encodeValue(enc, obj, null, tmp[i], node); } } else if (obj instanceof Map) ... При трассировке выяснилось, что obj действительно хранит массив из 10 числе типа Float. Для понимания ситуации, я сделал следующий пример, чтобы разобраться : public class Encast { public static void main(String[] args) { Object obj = createMassiv(); Object[] tmp = (Object[]) obj; } public static Float[] createMassiv() { Float[] obj = new Float[10]; for(int i = 0; i < obj.length; ++i) { obj[i] = (float) (i + 1); } return obj; } } В моём примере всё работает и преобразуется. Я не могу понять, в чём проблема в библиотеке, и как я могу переписать так, чтобы не было ошибки.
Ответы
Ответ 1
Проблема воспроизведется, если вы будете использовать тип float[] вместо Float[]. В Java массивы коварианты по типу, и т.к. тип Float является производным от Object, то и тип Float[] является производным от Object[]. Но примитивный тип float не является производным от ссылочного типа Object.
Комментариев нет:
Отправить комментарий