Это старый пост, куда я приехал, потому что я хотел сделать почти то же самое, но более простую версию ...
На самом деле это работает, если и Foo, и загруженный класс (в моем случае из файла классов .java в другом пакете) расширяют один и тот же класс, скажем, AbstractTestClass.
Кусочки кода:
public AbstractTestClass load(String toLoad) {
try{
Class test = Class.forName("testsFolder.testLoadable");
Constructor ctorlist[] = test.getDeclaredConstructors();
for(Constructor aConstructor : ctorlist){
if(...){// find the good constructor
Object loadedTest = aConstructor.newInstance(new Object[]{/*params*/});
return (AbstractTestClass) test;
}
}
}catch(...){}
return new defaultTestClass();
}
Таким образом, я могу вставить загруженный класс в ArrayList<AbstractTestClass>
.