Как сравнить 2 класса, которые загружаются из 2 разных загрузчиков классов - PullRequest
2 голосов
/ 22 октября 2010

вот мой случай: загрузчик классов A, загружен один класс («Class1»); Затем я изменил Class1.java и скомпилировал его. затем я снова загрузил Class1.class загрузчиком классов B. Я хочу сравнить эти 2 класса, проверить, изменились ли метаданные класса кем-либо. Есть ли способ сравнить данные определения 2 классов?

Ответы [ 2 ]

1 голос
/ 22 октября 2010

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

По определению вы подразумеваете их объявленные внутренние переменные и сигнатуры методов?Потому что вы можете сделать это с помощью отражения (getDeclaredMethod () и getDeclaredFields ()).Однако, если два класса загружены из разных загрузчиков классов, они не будут равны (см. Javadocs класса по равенству), даже если они загружены из одного и того же скомпилированного байт-кода.

Существует другая информация, которую вы можетеполучить от API Reflection, в том числе от того, какой класс он наследует, какие интерфейсы он реализует, и любые аннотации, которые скомпилированы с ним (конечно, при условии 1,5 или выше).

Вы также можете потенциально сделать хешфайлы классов (можно найти их через загрузчик классов) и посмотреть, отличаются ли они - это скажет вам, если в них есть другой код.

Надеюсь, это поможет.

0 голосов
/ 24 октября 2010

спасибо!Reflection может собирать метаданные одного класса, но сложно проверить, изменился ли один класс.

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

...