3

私が抱えているこの継承の問題に頭を悩ませようとしています。これが私の現在の状況です:

ここに画像の説明を入力

Activitiesしたがって、アクティビティのリスト (クラス) またはやることのリスト(クラス)のいずれかになる計画がありますTodos
ただし、これを次のように行うとTodos:

private List<Todo> todos;

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

タイプに互換性がないと言われています。

  • なぜ互換性がないのですか?

はからTodo拡張されているため、 が少なくとも と同じ機能Activityを提供することは確実ではありませんか? TodoActivity

そしておそらくもっと重要なこと:

  • デザインを調整して機能させるにはどうすればよいですか?

(私は UML の専門家ではないので、図に誤りがある場合はご容赦ください)

4

2 に答える 2

5

Java でのジェネリックスの悪夢のような貧弱な実装へようこそ。を使ってみてくださいpublic List<? extends Activity> getPlanning()

于 2013-08-06T10:19:28.010 に答える
2

Java で をList<Todos>として返すことが許可されているList<Activity場合、呼び出し元はそれに任意の値Activityを追加できます。明らかに、それが起こることを許してはなりません。

戻り値の型を に変更することで、返されたリストを読み取り専用にすることができますList<? extends Activity>。これにより、オブジェクトをリストに追加できなくnullなります (同じリストから直接取得されたオブジェクトを除く)。

于 2013-08-06T10:22:03.810 に答える