Ошибка компиляции при предоставлении интерфейса как тип массива - PullRequest
3 голосов
/ 10 августа 2011

У меня есть интерфейс, определенный как

interface ListItem {
    public String toString();
    public String getUUID();
}

И класс (BrowseItem), реализующий этот интерфейс.Когда я пытаюсь:

ArrayList<ListItem> = (method returning ArrayList of type BrowseItem)

Я получаю ошибку несовместимого типа (found ArrayList<BrowseItem>, require ...<ListItem>)

Неправильно ли я подхожу к этому?

Ответы [ 3 ]

10 голосов
/ 10 августа 2011

Обобщения Java не ковариантны.

См. ( среди многих других вопросов о SO ):


Решения:


NB как правило, рекомендуется объявлять типы списков как List<T>, а не ArrayList<T>.Вышеуказанный псевдокод отражает это.

3 голосов
/ 10 августа 2011

ваш пример не работает, но вы можете использовать

ArrayList<? extends ListItem> list = (method returning ArrayList of type browseItem)

это должно работать.

2 голосов
/ 10 августа 2011

ArrayList<listItem> не равно ArrayList<browseItem>

Они строго типобезопасны

Вы можете использовать ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...