У меня есть какой-то устаревший код, который выглядит следующим образом:
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?