2010-10-06 3 views
0

Я пытаюсь создать объект класса, используя только имя этого класса:Как загрузить пользовательский класс, унаследованный от существующего?

public interface Foo { 
} 
public class Bar implements Foo { 
} 
[...] 
Class<Foo> c = Class.forName("com.XXX.Bar").asSubclass(Foo.class); 
Foo foo = c.newInstance(); 

Компилятор говорит:

incompatible types found : 
java.lang.Class<capture#47 of ? extends com.XXX.Foo> 
required: java.lang.Class<com.XXX.Foo> 

Что здесь не так?

ответ

5

Поскольку c является некоторый класс, который расширяет Foo, вы должны выразить это в коде, используя <? extends ...> синтаксис:

Class<? extends Foo> c = Class.forName("com.XXX.Bar").asSubclass(Foo.class); 
+0

Kudos! Это сработало фантастически. – Sid

Смежные вопросы