动态实例化实现接口和调用接口方法的类

时间:2017-03-28 16:19:36

标签: java reflection interface invoke

我有一个界面dat %>% group_by(Year, Name, Status) %>% tally %>% ungroup %>% complete(Status, nesting(Year, Name), fill=list(n=0)) %>% spread(Status, n) %>% arrange(Name, Year) ,由一个方法 Year Name Added Continued `Did not participate` Dropped 1 2010 Mark 4 0 2 0 2 2011 Mark 0 2 2 2 3 2010 Mary 2 0 4 0 4 2011 Mary 0 1 4 1 5 2010 Rachale 3 0 3 0 6 2011 Rachale 1 3 2 0 7 2010 Tom 1 0 5 0 8 2011 Tom 2 1 3 0 组成。我还有一个ArrayList,其中包含所有实现LogParser的多个类的名称。是否可以遍历此类名列表并动态实例化其各自的类并调用parse(String x)

我遇到的问题是这些类没有零参数构造函数,因此我尝试通过反射调用parse方法时遇到了很多InstantiationException。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果实现类型没有构造函数,那将非常痛苦。最简单的方法是使用像Spring或Guice这样的依赖注入框架。

在Spring中,您可以注入一个List<LogParser>,然后您将获得所有已知的实现:

@Autowired
private List<LogParser> parsers;

当然,您必须将每个LogParser分别定义为Spring bean。

其他框架也有类似的功能。

答案 1 :(得分:0)

您必须调用一些构造函数来有效地实例化对象。您使用反射来获取构造函数的Method,并使用它进行实例化。见Instantiate a class object with constructor that accepts a string parameter?。我没有复制,因为你有另外一个问题:你知道你的所有类都有一个具有相同签名的构造函数吗?