разрешение конфликтов имен классов в Java - PullRequest
3 голосов
/ 25 сентября 2010

У меня есть ситуация, когда я должен загрузить именованный класс. Если в моем пути к классам есть несколько классов с одинаковым именем (скажем, com.example.myclass), я должен загрузить оба. Я использую метод loadClass () моего класса CustomLoader, который наследуется от java.lang.ClassLoader. Я не изменил поведение родительского класса, а просто вызываю родительские методы. Моя проблема в том, что если есть два класса с одинаковыми именами, я могу загрузить только один из них. Я просканировал сеть для решения, но не нашел. Я нашел много решений по перезагрузке классов путем создания нового экземпляра загрузчика классов, но в моем случае новый экземпляр, вероятно, в конечном итоге снова загрузит первый класс. Можно ли решить эту проблему?

РЕДАКТИРОВАТЬ: я забыл упомянуть, что два класса с одинаковым именем находятся в разных файлах JAR.

РЕДАКТИРОВАТЬ: Джон и Стивен дали одно и то же решение, но я могу отметить только один как ответ. Извините :(. Я проголосовал за оба ответа.

Ответы [ 3 ]

6 голосов
/ 25 сентября 2010

I считаю библиотеки JVM и классов предполагают, что имя класса уникально в загрузчике классов. Поэтому, если вы хотите загрузить одно и то же имя класса для разных классов, вам понадобятся разные загрузчики классов (например, один для каждого файла JAR).

Использовать их может быть непросто, но с такими вещами вы сталкиваетесь.

4 голосов
/ 25 сентября 2010

API загрузчика классов не может указать, какой из двух классов с одинаковым именем пытается загрузить ваше приложение.

Вам потребуется настроить два разных загрузчика классов с разными путями. Затем вам нужно будет загрузить классы, вызвав метод loadClass(String) для соответствующих загрузчиков классов.

Есть множество "гадч", делающих подобные вещи. Один из них заключается в том, что типы экземпляров соответствующих классов будут отличаться, и типы переходят от одного типа к другому.

0 голосов
/ 26 сентября 2010

Я полагаю, что здесь что-то серьезно не так с проблемой .Как такое положение вещей может вообще возникнуть?Что-то серьезно не так с процессом разработки, который может создавать дублирующие классы.

Или это проблема, которую это пытается решить?Или поставить диагноз?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...