我有一个界面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。
谢谢!
答案 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?。我没有复制,因为你有另外一个问题:你知道你的所有类都有一个具有相同签名的构造函数吗?