您应该使用Class<? extends SomeClass>
,因为这就是泛型的用途。
在调用时Class.forName
,检查它是否SomeClass.class.isAssignableFrom
是新类。否则,你应该抛出一个IllegalArgumentException
or ClassCastException
。
编辑:或者,打电话asSubclass(SomeClass.class)
会为你做这件事。
例如:
public SomeClass instantiate(String name)
throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class<?> raw = Class.forName(name);
//throws ClassCastException if wrong
Class<? extends SomeClass> generic = raw.asSubclass(SomeClass.class);
// do what you want with `generic`
return generic.newInstance();
}