2013-08-06 4 views
2

Я пытаюсь обвести голову вокруг этой проблемы наследования, которую у меня есть. Вот моя текущая ситуация:Несовместимые типы с наследованием Java

enter image description here

Так у меня есть планирование, которое может быть либо список мероприятий (класс Activities) или список вещей, чтобы сделать (класс Todos).
Однако, если я делаю это в Todos:

private List<Todo> todos; 

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

Это говорит о том, что типы несовместимы.

  • Почему они несовместимы?

Поскольку Todo простирается от Activity, мы не уверены, что Todo обеспечивает, по меньшей мере, такую ​​же функциональность как Activity?

и, возможно, более важно:

  • Как настроить мой дизайн делать работу?

(я не эксперт в UML так что простите меня, если есть какая-то ошибка в моей схеме)

ответ

2

Если Java разрешило вам вернуть List<Todos> в качестве List<Activity, вызывающий может затем добавить в него Activity. Ясно, что этого нельзя допускать.

Вы можете сделать возвращенный список доступным только для чтения, изменив тип возврата на List<? extends Activity>. Это не позволит добавить любые объектов к списку (кроме null или объектов, непосредственно извлеченных из того же списка).

+0

Спасибо, это отвечает на мои вопросы! – Aerus

2

Добро пожаловать в кошмар и плохую реализацию дженерик в Java. Попробуйте использовать public List<? extends Activity> getPlanning().

Смежные вопросы