Класс <T> и статический метод Class.forName () сводят меня с ума

этот код не компилируется. Мне интересно, что я делаю не так

private static Importable getRightInstance(String s) throws Exception {
 Class<Importable> c = Class.forName(s);
 Importable i = c.newInstance();
 return i;
}

где Importable - это интерфейс, а строка s - это имя реализующего класса. Компилятор говорит:

./Importer.java:33: incompatible types
found   : java.lang.Class<capture#964 of ?>
required: java.lang.Class<Importable>
  Class<Importable> c = Class.forName(format(s));

спасибо за любую помощь!

Все решения

Class<? extends Importable> c = Class.forName(s).asSubclass(Importable.class);

а также

Class<? extends Importable> c = (Class<? extends Importable>) Class.forName(s);

а также

Class<?> c = Class.forName(format(s));
Importable i = (Importable)c.newInstance();

дать эту ошибку (которую я не понимаю):

Exception in thread "main" java.lang.IncompatibleClassChangeError: class C1 
has interface Importable as super class

где C1 на самом деле реализует Importable (так что теоретически он может быть преобразован в Importable).

Ответы на вопрос(0)

Ваш ответ на вопрос