3

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

在此处输入图像描述

所以我有一个计划,可以是活动列表(类Activities)或要做的事情列表(类Todos)。
但是,如果我这样做Todos

private List<Todo> todos;

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

它说类型不兼容。

  • 为什么它们不兼容?

由于从Todo扩展Activity,我们是否确定它Todo至少提供与 相同的功能Activity

也许更重要的是:

  • 如何调整我的设计以使事情正常进行

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

4

2 回答 2

5

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

于 2013-08-06T10:19:28.010 回答
2

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

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

于 2013-08-06T10:22:03.810 回答