A classe <T> e o método estático Class.forName () me deixam louco
esse código não compila. Estou imaginando o que estou fazendo de errado:
private static Importable getRightInstance(String s) throws Exception {
Class<Importable> c = Class.forName(s);
Importable i = c.newInstance();
return i;
}
onde Importable é uma interface e a string s é o nome de uma classe de implementação. O compilador diz:
./Importer.java:33: incompatible types
found : java.lang.Class<capture#964 of ?>
required: java.lang.Class<Importable>
Class<Importable> c = Class.forName(format(s));
Obrigado por qualquer ajuda!
Todas as soluções
Class<? extends Importable> c = Class.forName(s).asSubclass(Importable.class);
e
Class<? extends Importable> c = (Class<? extends Importable>) Class.forName(s);
e
Class<?> c = Class.forName(format(s));
Importable i = (Importable)c.newInstance();
dê este erro (que eu não entendo):
Exception in thread "main" java.lang.IncompatibleClassChangeError: class C1
has interface Importable as super class
onde C1 está realmente implementando Importable (portanto, é teoricamente convertível em Importable).