2015-02-16 7 views
0

Я хотел бы получить все классы или интерфейсы, которые реализуют или расширяют интерфейс Externalizable. Для того же я использовалЧтобы проверить класс или интерфейс, реализует или расширяет определенный интерфейс

Externalizable.class.isAssignableFrom (clasz)

Но мое намерение состоит в том, чтобы получить только классы или интерфейсы, которые реализуют или распространяются Externalizable. Мне не нужен clasz, если Externalizable не является суперклассом или суперповерхностью на уровне . Было бы здорово, если бы кто-то помог мне с решением.

+0

У вас уже есть это, помимо того факта, что он будет оцениваться как истинный для Externalizable. Что заставляет вас думать, что ваше утверждение будет оцениваться как true для суперкласса или супер интерфейса Externalizable? Похоже, вы изменили значение [документации isAssignableFrom()] (http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isAssignableFrom (java.lang.Class)). – gknicker

+0

Предположим, у меня есть интерфейс A, который расширяет Externalizable и класс B, который реализует A. Тогда мне нужен только интерфейс A в результате, и мне не нужен класс B в результатах. – Clinto

+0

Итак, вы хотите, чтобы только прямые (первый уровень) потомки Externalizable? – gknicker

ответ

1

Похоже, вы хотите только классы и интерфейсы, которые непосредственно реализуют Externalizable.

Class<?>[] interfaces = clasz.getInterfaces(); 
for (Class<?> c: interfaces) { 
    if (c.equals(Externalizable.class)) { 
     // clasz is a direct descendent of Externalizable 
    } 
} 

Если вам просто нужно знать реализаторы в Java стандартной версии, они перечислены в Externalizable javadoc.

Смежные вопросы