Как отличить интерфейс от класса java Класс - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть какой-то устаревший код, который выглядит следующим образом:

    Set<Class<? extends Foo>> classes = reflections.getSubTypesOf(Foo.class);
    for (Class<? extends Foo> cl : classes) {
        Foo<?, ?> foo = cl.newInstance();
        // use foo
    }

Я хотел бы добавить другой интерфейс:

interface NewFoo extends Foo {...}

Но затем он пытается вызвать newInstance в NewFoo. На данный момент мое решение таково:

        try {
            Foo<?, ?> foo = cl.newInstance();
            // use foo
        } catch (InstantiationException ignore) {
        }

но мне интересно, есть ли лучший способ? Могу ли я различить интерфейс и класс, когда у меня в руке есть объект Class?

Ответы [ 2 ]

4 голосов
/ 04 февраля 2020

Вы можете вызвать метод экземпляра в классе

 clazz.isInterface() 
1 голос
/ 04 февраля 2020

Вы можете различить, представляет ли объект Class тип интерфейса, вызвав метод isInterface().

См. Ниже:

Set<Class<? extends Foo>> classes = reflections.getSubTypesOf(Foo.class);
for (Class<? extends Foo> cl : classes) {

    if (! cl.isInterface()) {
        Foo<?, ?> foo = cl.newInstance();
        // use foo
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...