этот код не компилируется.Мне интересно, что я делаю неправильно:
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).