Как конвертировать ArrayList <subClass>в ArrayList <super>в Java - PullRequest
7 голосов
/ 12 марта 2012

У меня есть метод setData(ArrayList<super> list), поэтому любой, кто хочет установить данные, может иметь свою собственную сущность, просто нужно выйти из суперкласса.но когда они вызывают setData, как они конвертируют ArrayList в ArrayList?

Теперь я использую setData (новый ArrayList (список)), но это не хорошее решение.

Любой может сказать мнеКак конвертировать или другое решение может избежать проблемы.Очень ценится!

Ответы [ 2 ]

17 голосов
/ 12 марта 2012

Это зависит от того, что вы хотите сделать со списком впоследствии.Если вы просто собираетесь читать из него, вы можете объявить свой метод следующим образом:

setData(ArrayList<? extends SuperType> list)

Вы не можете ничего добавить в этот список, потому что вы не будете знать, что ?является.Другой вариант - создать копию при вызове вашего метода:

List<SubType> subtypeList = ...;
setData(new ArrayList<SuperType>(subtypeList));
4 голосов
/ 12 марта 2012

вместо кодирования

setData(new ArrayList(list));

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

setData((ArrayList<super>)((Object)list));

Сначала приведение списка к Object, а затем к ArrayList заставит компилятор принять вызов метода. В качестве дополнительного бонуса вы не понесете затрат на производительность при создании нового списка массивов.

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