Получение исключения в классе, где оба класса точно так же

StackOverflow https://stackoverflow.com/questions/2371967

  •  24-09-2019
  •  | 
  •  

Вопрос

Я делаю проект шва JBoss и когда я просматриваю форму, которую я получаю эту ошибку.

java.lang.ClassCastException:
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav cannot be cast to
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav

Его всегда тот же класс JPA, который связан с видом, который отображается на экране, это не имеет смысла для меня, почему это тот же класс, это кажется невозможным.

Это было полезно?

Решение

Это происходит, когда два разных ClassLoader Объекты нагрузки классов с тем же именем. Равенство двух классов в Java зависит от полностью квалифицированного имени а также классный погрузчик, который загрузил его.

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

Другие советы

Как объяснил Доахим ранее, Java.lang.classcastexception обычно возникает, когда два классы загружают классы с тем же именем. Однако я сталкивался с другой ситуацией, когда это могло произойти.

Это может произойти с некоторыми IDE, которые автоматически перезагружает классы, которые были изменены. В таких случаях могут быть более старые версии класса, сохраненного в памяти, вызывающем классноеexception.

Вот несколько способов решить эту проблему:

  1. Если вы пишете пользовательский загрузчик класса, во время загрузки класса Убедитесь, что загрузчик класса Base / по умолчанию уже не имеет экземпляра этого класса загруженного.

  2. Укажите класс загруженным подклассом класса, который уже загружен погрузчиком класса по умолчанию.

  3. Сделайте нагруженный класс, реализуемый интерфейс, который уже загружен погрузчику класса по умолчанию.

Больше информации здесь - http://www.jspwiki.org/wiki/a2aclasscastexception.

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

Вы, вероятно, получили дубликатную копию CsiTipoLav В вашем приложении и две разные копии загружаются в разное время от разных классов. У Jboss есть множество различных классов в иерархии, и легко получить вещи в повороте.

Убедитесь, что у вас есть только одна копия класса.

Объект, который вы пытаетесь сбрасывать, загружается другим классовым загрузчиком, чем тот, который загрузил класс, в который вы пытаетесь бросить.

В моем случае у меня было два разных * .ear и хотела загрузить класс с другой. Поэтому мне пришлось изолировать классную загрузку. Я использовал это описание:

http://www.thorgull.be/wiki/index.php?title=classloader_isolation_in_jboss.

Это сработало для меня.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top