Еще одно java.lang.ClassCastException - PullRequest
1 голос
/ 03 января 2012

У меня проблема с приведением переменной (см. Ниже) к строке, чтобы она могла отображаться в графическом интерфейсе. Немного справочной информации: я создал графический интерфейс Java, который будет запускать некоторый код Matlab (используя MatlabProxy), и как часть процесса я пытаюсь обновить графический интерфейс с помощью некоторой полезной информации (передаваемой обратно в графический интерфейс от Matlab) о конкретных данных файл (который выбрал пользователь). Функция «getMVariable ()» MatlabProxy возвращает объект типа «double» (в моем случае); однако, когда я пытаюсь привести это к строке, используя

String text = (String) getMVariable("testInfo.freqMax");

Я получаю ClassCastException: «[D не может быть приведен к java.lang.String.» Я также попытался привести его к массиву String (String []) без удачи. Я читал некоторые посты, в которых говорится что-то об использовании Array.copyOf или что-то о списке массивов, но не смог понять этого.

Ответы [ 4 ]

1 голос
/ 03 января 2012

[D означает, что это double[]. См Class#getName().

double[] foo = (double[]) getMVariable("testInfo.freqMax");

После этого вам решать, что с ним делать.

0 голосов
/ 03 января 2012

замена этой строки этим кодом может прояснить, что происходит:

String text = "";
double[] allValues = getMVariable("testInfo.freqMax");

for(double oneValue : allValues) {
    System.out.println("adding the characters '" + oneValue + " ' to text");
    text += oneValue;
    text += " ";
}

System.out.println("after we've read all values, text has become: '" + text + "'");

если вы не знакомы со структурой "for", просто спросите:)

0 голосов
/ 03 января 2012

Если вы уверены, что

getMVariable ("testInfo.freqMax")

возвращает Double, то почему бы не пользователь

getMVariable ("testInfo.freqMax"). toString ();

0 голосов
/ 03 января 2012

Если тип [D, то у вас есть double[], а не double или Object[]

Тебе нужно что-то подобное.

Object var = getMVariable("testInfo.freqMax");
String text;
if (var instanceof double[])
   text = Arrays.toString((double[]) var);
else
   text = "" + var;
...