private static Importable getRightInstance (String s) генерирует исключение {Class c = Class.forName (s) .asSubclass (Importable.class);Импортируемый i = c.newInstance ();вернуть я;}
, который я также могу написать
private static Importable getRightInstance(String s) throws Exception {
Class<? extends Importable> c = (Class<? extends Importable>)Class.forName(s);
Importable i = c.newInstance();
return i;
}
или
private static Importable getRightInstance(String s) throws Exception {
Class<?> c = Class.forName(s);
Importable i = (Importable)c.newInstance();
return i;
}
, где Importable - это интерфейс, а s - строка, представляющая реализующий класс.Ну, в любом случае это дает следующее:
Exception in thread "main" java.lang.IncompatibleClassChangeError: class C1 has
interface Importable as super class
Вот последний фрагмент трассировки стека:
at java.lang.Class.forName(Class.java:169)
at Importer.getRightImportable(Importer.java:33)
at Importer.importAll(Importer.java:44)
at Test.main(Test.java:16)
Теперь класс C1 фактически реализует Importable, и я полностью не 'не понимаю, почему это жалобы.
Заранее спасибо.