2012-07-23 60 views
2

Possible Duplicate:
Why we can't do List<Parent> mylist = ArrayList<child>();Java:多态性和调用方法

我有一个关于多态性和调用方法的问题。

我的服务层签名public void saveRules(String paramOne, String paramTwo, List<RuleDTO> rules)

EvaluationRuleDTO extends from RuleDTO

所以从我的控制器我尝试执行以下操作:

service.saveRules(String paramOne, String paramTwo, List<EvaluationRuleDTO> rules)

但这是不允许的,因为它抱怨List<EvaluationRuleDTO>规则不是List<RuleDTO> rules

这没有多大意义了我。这是Java语言中的一个弱点,还是我在这里错过了什么概念?

感谢

+0

如果你读了该链接,显然,这不是Java中的一个弱点。 – jahroy 2012-07-23 22:42:46

回答

4

它发生,因为在列表类型应用多态性,而不是在它的仿制药。

编辑1:迈克尔贴有一个有用的链接评论。

编辑2:您可以(从Why we can't do List<Parent> mylist = ArrayList<child>();)做:

List<? extends RuleDTO> list = yourEvaluationRuleDTOList; 
+0

OK,我知道了,现在,是有道理的。那么在这里对我的问题有什么好的解决方案?我想使用泛型的东西,但我不是100%肯定 – DJ180 2012-07-23 22:47:05

+0

@DJoyce:我用的链接呈现尖端补充我的职务。 – davidbuzatto 2012-07-23 22:50:50

+0

现在我得到这个错误:方法saveRules(字符串,字符串,列表)不适用于参数(字符串,字符串, 列表<捕获#1 of?extends RuleDTO>) – DJ180 2012-07-23 22:59:15