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