我正在尝试使函数采用可扩展的多个类之一Foo,并在其Class中返回该对象的新实例,而不是的新实例Foo。
Foo
我确定这是一个常见问题。有没有好的例子?
我从未使用过一个类作为输入参数,只使用了一个类的成员。根据我的搜索,这应该可行吗?
您是将Class对象作为参数传递还是作为的子类传递Foo?
Class
在这两种情况下,解决方案都几乎相同,您可以在Class对象上使用newInstance方法。
/** * Return a new subclass of the Foo class. */ public Foo fooFactory(Class<? extends Foo> c) { Foo instance = null; try { instance = c.newInstance(); } catch (InstantiationException e) { // ... } catch (IllegalAccessException e) { // ... } return instance; // which might be null if exception occurred, // or you might want to throw your own exception }
如果需要构造函数参数,则可以使用Class getConstructor方法,然后从那里使用Constructor newInstance(…)方法。