isAssignableFrom функция Class.java - PullRequest
1 голос
/ 28 октября 2009

Я пытаюсь подписаться

Context ctx = (Context) jndiCntx.lookup (fSTANDARD_ENVIRONMENT);

Object obj = ctx.lookup (fSTANDARD_JNDINAME);

И следующий код возвращает мне ложь

MyClass.class.isAssignableFrom (obj.getClass ())

хотя

MyClass.class.getName (). EqualsIgnoreCase (obj.getClass (). GetName ()) возвращает true.

Я не могу привести объект к MyClass, поскольку он вызывает исключение ClassCastException.

В чем может быть проблема?

Ответы [ 2 ]

2 голосов
/ 28 октября 2009

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

Посмотрите на obj.getClass().getClassLoader() против звонка getClassLoader() в вашем текущем коде.

Доступен ли сам класс из двух разных файлов jar? Обычно это легко разобраться. Сложнее, если у вас есть два отдельных загрузчика классов, каждый из которых использует один и тот же файл jar.

В каком контейнере вы работаете? Я предлагаю вам взглянуть на документацию для контейнеров для загрузчиков классов ... например, вот руководство по Tomcat 5.5 ClassLoader .

0 голосов
/ 18 ноября 2009

Подожди, почему ты вызываешь "equalsIgnoreCase", чтобы проверить имена классов, а не просто "равно"? Возможно ли, что у вас есть конфликт между (почти) совпадающими именами?

...