Проверить имплементирует ли класс определенный интерфейс
От: the_moon  
Дата: 16.04.10 22:30
Оценка:
Привет,

пишу программку, она читает конфиг в котором прописанно имя класса, объект которого будет потом создаваться. Классы, которые будут прописываться в конфиге имплементируют определенный интерфейс и в мне хотелось бы в программке предварительно проверить, имплементирует ли класс, прочитанный из конфига этот Интерфейс или нет.


Попробовал так, где RVImporter это как раз и есть интерфейс

        String iclass = imps.item(0).getAttributes().getNamedItem("class").getNodeValue();

        Class theClass  = Class.forName(iclass);
        Object o = theClass.newInstance();
        if( o instanceof RVImporter  )
        {
            throw new Exception("Specified importer class is not an importer! " + iclass );
        }
        this.importer = (RVImporter)o;



Но проверка "o instanceof iImporter" не проходит, не инстанца говорит.

java.lang.Exception: Specified importer class ist not an importer! relavis.importer.ora.oraImporter

Как правильно эту проверку сделать, в интернете что то ничего не нашлось подходящего?

Спасибо
KOPOTbILLIKA KPbIC
Re: Проверить имплементирует ли класс определенный интерфейс
От: Дмитрий Писаренко Россия http://dmitripisarenko.me
Дата: 16.04.10 23:45
Оценка: +1
Здравствуйте, the_moon, Вы писали:


Взгляните на метод Class.isAssignableFrom.

Успехов

Дмитрий
Дмитрий Писаренко

http://dmitripisarenko.me
Re: Проверить имплементирует ли класс определенный интерфейс
От: sdo.daemon  
Дата: 17.04.10 07:14
Оценка: +1
Здравствуйте, the_moon, Вы писали:

_>Привет,


_>пишу программку, она читает конфиг в котором прописанно имя класса, объект которого будет потом создаваться. Классы, которые будут прописываться в конфиге имплементируют определенный интерфейс и в мне хотелось бы в программке предварительно проверить, имплементирует ли класс, прочитанный из конфига этот Интерфейс или нет.



_>Попробовал так, где RVImporter это как раз и есть интерфейс


_>
_>        String iclass = imps.item(0).getAttributes().getNamedItem("class").getNodeValue();

_>        Class theClass  = Class.forName(iclass);
_>        Object o = theClass.newInstance();
_>        if( o instanceof RVImporter  )
_>        {
_>            throw new Exception("Specified importer class is not an importer! " + iclass );
_>        }
_>        this.importer = (RVImporter)o;
_>



_>Но проверка "o instanceof iImporter" не проходит, не инстанца говорит.


_>java.lang.Exception: Specified importer class ist not an importer! relavis.importer.ora.oraImporter


_>Как правильно эту проверку сделать, в интернете что то ничего не нашлось подходящего?


_>Спасибо


Если НЕ имплементирует то вываливай эксепшен, а то что у тебя — наоборот
if( ! (o instanceof RVImporter)  )
Re[2]: Проверить имплементирует ли класс определенный интерф
От: Пацак Россия  
Дата: 17.04.10 20:01
Оценка:
Здравствуйте, sdo.daemon, Вы писали:

SD>Если НЕ имплементирует то вываливай эксепшен, а то что у тебя — наоборот


В данном случае ничего проверять и "вываливать" вообще не надо: если созданный инстанс не RVImporter, то следующая же строчка с cast'ом выбросит ClassCastException автоматически.
Ку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.