[Java.lang.String; не может быть приведен к java.lang.String - PullRequest
6 голосов
/ 01 февраля 2012

Я получаю вектор из API продукта.

Vector<?> dataVector = dataAPI.getReturnVector();

Ожидается, что вектор будет содержать строки в качестве значения.Я могу напечатать размер вектора как 2. Но по какой-то причине я не могу перебрать и напечатать значения.

Я пытался

Iterator<?> iter = dataVector.iterator();

while( iter.hasNext()) {
    System.out.println(iter.next());
}

Я всегда заканчиваюдо получения

[java.lang.String; cannot be cast to java.lang.String

Я использовал

iter.next().getClass().getName() 

, и это оказалось только java.lang.String.

Я немного погуглил и обнаружил похожую проблему вhttp://prideafrica.blogspot.com/2007/01/javalangclasscastexception.html

Я попытался установить для дженериков значение String[], но в результате возникла та же ошибка.

Если вектор содержит java.lang.String, почему я получаю этобросить исключение?Как я могу распечатать фактические значения?

Просьба предоставить ваши предложения.

Ответы [ 3 ]

7 голосов
/ 01 февраля 2012

Таким образом, API возвращает не вектор строк, а вектор строк [].

Вы должны иметь возможность перебирать вектор, а затем для каждого элемента циклически проходить по массиву.

Iterator<String[]> iter = dataVector.iterator();

while( iter.hasNext()) {
    String[] array = iter.next();
    for(int i=0; i < array.length; i++)
    {
       System.out.println(i + ": " + array[i]);
    }
}
4 голосов
/ 01 февраля 2012

Попробуйте сравнить их classLoaders. Если они разные, то это исключение произойдет.

StringClass1.getClassLoader()==StringClass2.getClassLoader();
1 голос
/ 01 февраля 2012

Нет необходимости использовать итератор. Вы можете просто использовать elementAt(index) метод Vector s для печати значений. Используйте цикл For, чтобы получить индексы Vector.

Пример:

Vector<?> dataVector = dataAPI.getReturnVector();
for(int i = 0; i < dataVector.size(); i++) {
    System.out.println(dataVector.elementAt(i));
}

Если вы получаете странный ответ (из цифр и букв), вы получаете String[] объект. Это означает, что вы будете использовать встроенный метод Arrays для печати массива String[]. Смотрите комментарии ниже.

...