通用信息在运行时丢失。没有等效于Creator
.class的运行时。您可以在Creator和StringCreator之间创建一个用于修复通用类型的类型:
public interface Creator<T> { T create();}public interface StringCreator extends Creator<String> { }public class StringCreatorImpl implements StringCreator { public String create() { return new String(); }}public class FancyStringCreator implements StringCreator { public String create() { return new StringBuffer().toString(); }}public static void main(String[] args) throws Exception { Class<?> someClass = Class.forName(args[0]); Class<? extends StringCreator> creatorClass = someClass.asSubclass(StringCreator.class); Constructor<? extends StringCreator> creatorCtor = creatorClass.getConstructor((Class<?>[]) null); Creator<String> creator = creatorCtor.newInstance((Object[]) null);}但是当然会失去一些灵活性,因为您不能使用以下创建者类:
public class AnotherCreator implements Creator<String> { public String create() { return ""; }}


