与继承Java不兼容的类型

时间:2013-08-06 10:15:47

标签: java inheritance

我正试图解决我遇到的继承问题。这是我目前的情况:

enter image description here

所以我的计划可以是活动列表(类Activities),也可以是要做的事情列表(类Todos)。
但是,如果我在Todos中执行此操作:

private List<Todo> todos;

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

它说这些类型是不兼容的。

  • 为什么它们不相容?

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

也许更重要的是:

  • 如何将设计调整为让事情正常工作

(我不是UML的专家,如果我的图表中有错误,请原谅我)

2 个答案:

答案 0 :(得分:2)

欢迎使用Java中的噩梦和糟糕的泛型实现。尝试使用public List<? extends Activity> getPlanning()

答案 1 :(得分:2)

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

您可以通过将返回类型更改为List<? extends Activity>来使返回的列表成为只读。这将禁止将任何对象添加到列表中(null除外或直接从同一列表中检索的对象)。