您应该使用Class<? extends SomeClass>,因为这就是泛型的用途。
在调用时Class.forName,检查它是否SomeClass.class.isAssignableFrom是新类。否则,你应该抛出一个IllegalArgumentExceptionor 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();
}