Класс <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).