我有一个接口,LogParser
,由一个方法parse(String x)
组成。我还有一个 ArrayList,其中包含多个类的名称,这些类都实现了LogParser
。是否可以遍历此类名列表并动态实例化它们各自的类并调用parse(String x)
?
我遇到的问题是这些类没有零参数构造函数,所以我在尝试通过反射调用解析方法时遇到了很多 InstantiationException。
谢谢!
如果实现类型没有构造函数,那将是非常痛苦的。最简单的方法可能是使用像Spring或Guice这样的依赖注入框架。
在 Spring 中,您只需注入一个 List<LogParser>
,您将获得所有已知的实现:
@Autowired
private List<LogParser> parsers;
现在当然,您必须将每个LogParser
分别定义为春豆。
其他框架中也有类似的功能。
您必须调用某个构造函数才能有效地实例化对象。你使用反射来获取构造函数的Method
,并以此进行实例化。请参阅使用接受字符串参数的构造函数实例化类对象?。我没有关闭为重复项,因为您有额外的问题:您知道所有类都有一个具有相同签名的构造函数吗?