Интерпретация сообщения об ошибке исключения JVM-класса - что такое оригинальный тип, который не может быть приведен - PullRequest
2 голосов
/ 28 января 2010

У меня есть производственная система Java с IBM JVM, работающей в Linux.
Клиент сообщает следующее исключение, напечатанное в журнале:
java.lang.ClassCastException: [B incompatible with java.lang.String
При попытке привести отдельные атрибуты, возвращенные из: javax.naming.directory.InitialDirContext(...)
Из этого исключения я не могу понять, какой тип не может быть преобразован в String. Что такое "B"?

Обычно я знаю, что сообщение об ошибке приведения класса должно выглядеть примерно так:
java.lang.ClassCastException: java.lang.Integer incompatible with java.lang.String
Но, как вы видите, это не относится к первой распечатке.
Я думал, что может существовать реальный класс с именем B, но я мог бы найти его в javax.naming ...
Здесь происходит обфускация имени?
Теперь я планирую отправить клиенту версию, которая распечатает класс экземпляра перед попыткой приведения к строке:
i.getClass().getCanonicalName()
Но эти пинг-понги занимают неделю, если у вас есть идея, и вы могли бы помочь мне до этого, это было бы супер!

1 Ответ

4 голосов
/ 28 января 2010

[B - это массив byte (то есть byte[]).Обратите внимание, что [ является частью имени.

См. API для Class.getName(), чтобы узнать, как создаются эти имена.

...