2013-08-06 91 views
2

我正试图围绕这个继承问题包裹我的头。这是我目前的情况:具有继承性的不兼容类型Java

enter image description here

所以我有一个计划是可以是活动目录(类Activities)或东西的清单做(类Todos)。
但是,如果我这样做在Todos

private List<Todo> todos; 

public List<Activity> getPlanning(){ 
    return todos; 
} 

它说,该类型是不兼容的。

  • 它们为什么不兼容?

由于TodoActivity延伸,我们是不是肯定Todo至少提供相同的功能Activity

,也许更重要的是:

  • 如何调整我的设计使事情工作

(我不是在UML的专家,所以原谅我,如果有我图中的一些错误)

回答

2

如果Java允许您将List<Todos>作为List<Activity返回,则调用者可以将任何Activity添加到其中。显然,这是不允许发生的。

通过将返回类型更改为List<? extends Activity>,可以使返回的列表为只读。这将不允许将任何对象添加到列表中(除了null或直接从相同列表中检索到的对象)。

+0

谢谢,这回答我的问题! – Aerus

2

欢迎噩梦和执行不力的Java泛型的。尝试使用public List<? extends Activity> getPlanning()