Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чем разница generics объявлений, ArrayList<?> и ArrayList<Object> 
V
    Опции темы
Royan
Дата 20.2.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



В чем смысловая разница следующих двух объявлений?

Код

ArrayList<?> ar = new ArrayList<Object>();
ArrayList<Object> ar2 = new ArrayList<Object>();



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Kangaroo
Дата 20.2.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Royan
попробуйте написать:
Код

ArrayList<?> ar = new ArrayList<String>();
ArrayList<Object> ar2 = new ArrayList<String>();

? - это любой тип, а Object - только Object

У меня в продолжение вопрос.
А вот тут - в чем разница? Помню где-то читал, но все забывается..  smile 
Код

ArrayList<?> ar = new ArrayList<String>();
ArrayList<? extends Object> ar2 = new ArrayList<String>();


Это сообщение отредактировал(а) Kangaroo - 20.2.2008, 12:37


--------------------
Lost....
PM MAIL MSN   Вверх
LSD
Дата 20.2.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



ArrayList<?> - это неопределенный тип. Из такого листа можно только читать, но не писать. И любой лист можно привести к нему, без кастов и ворнингов.

ArrayList<Object> - это лист Object-ов читать и писать в него можно Object и все что к нему приводится (т.е. все что угодно). Но вот привести список ArrayList<String> к ArrayList<Object> - нельзя (без кастов и ворнингов).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Royan
Дата 20.2.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Ясно спасибо!


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Kangaroo
Дата 20.2.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



LSD, а мой вопрос?  smile 
Код

ArrayList<?> ar = new ArrayList<String>();
ArrayList<? extends Object> ar2 = new ArrayList<String>();



--------------------
Lost....
PM MAIL MSN   Вверх
LSD
Дата 20.2.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Kangaroo, практически тоже самое, для <? extends Object> это особого смысла не имеет (я так понял, что они идентичны). Такая констукция нужна для вещей подобных:
Код

ArrayList<String> strings = new ArrayList<String>();
ArrayList<? extends CharSequence> charSequences = strings;



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Kangaroo
Дата 20.2.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Цитата(LSD @  20.2.2008,  16:19 Найти цитируемый пост)
Kangaroo, практически тоже самое, для <? extends Object> это особого смысла не имеет (я так понял, что они идентичны). 

Тут главное слово практически. Где-то я читал различие. 

Ну ок - если вспмоню, отпишусь.
LSD, спасибо!


--------------------
Lost....
PM MAIL MSN   Вверх
Silwester
Дата 20.2.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 23.2.2007

Репутация: нет
Всего: нет



Извиняюсь за возможный оффтоп, но мне лично интересно, а потому не могу не спросить - на мой взгляд generics является неким подобием шаблонов из С++(правда намного более функциональным). Есть ли у кого подобная точка зрения и вообще как на наш великий язык перевести это чудное слово?
PM MAIL   Вверх
Kangaroo
Дата 20.2.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Цитата(LSD @  20.2.2008,  16:19 Найти цитируемый пост)
Kangaroo, практически тоже самое, для <? extends Object> это особого смысла не имеет (я так понял, что они идентичны)

Да! LSD как всегда прав  smile  Нашел, что это полностью идентичные выражения.



Цитата(Silwester @  20.2.2008,  20:29 Найти цитируемый пост)
Извиняюсь за возможный оффтоп, но мне лично интересно, а потому не могу не спросить - на мой взгляд generics является неким подобием шаблонов из С++(правда намного более функциональным).

Да, так оно и есть. Только в Java шаблоны существуют только для проверки во время компиляции, реальных классов для каждого типа не создается.


Цитата(Silwester @  20.2.2008,  20:29 Найти цитируемый пост)
наш великий язык перевести это чудное слово? 

Это непереводимый сленг  smile 


--------------------
Lost....
PM MAIL MSN   Вверх
nornad
Дата 20.2.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(Kangaroo @  21.2.2008,  01:04 Найти цитируемый пост)
Цитата(Silwester @  20.2.2008,  20:29 Найти цитируемый пост)
наш великий язык перевести это чудное слово? 

Это непереводимый сленг

Да, лучше не переводить, но если всё же очень тянет, то я бы это перевёл как "обобщения". Только при джавистах не упоминай перевод - не поймут. smile 


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Silwester
Дата 22.2.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 23.2.2007

Репутация: нет
Всего: нет



Цитата(nornad @  20.2.2008,  22:45 Найти цитируемый пост)
Только при джавистах не упоминай перевод - не поймут.

Да это просто из любопытства.


Цитата(Kangaroo @  20.2.2008,  22:04 Найти цитируемый пост)
Да, так оно и есть. Только в Java шаблоны существуют только для проверки во время компиляции, реальных классов для каждого типа не создается.


это я и хотел узнать, спасибо. А что значит что реальных классов для каждого типа не создается? Имеется ввиду то, что этот механизм разработан для выявления ошибок на этапе компиляции и...
PM MAIL   Вверх
nornad
Дата 22.2.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(Silwester @  22.2.2008,  23:30 Найти цитируемый пост)
А что значит что реальных классов для каждого типа не создается?

Это значит, что в Си для list<ClassA> и list<ClassB> будет создано два класса (с раздельным кодом классов в памяти). В Java в подобной ситуации будет в памяти лишь один вариант кода класса list<>, но для каждого объекта данные, конечно же, свои.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Silwester
Дата 22.2.2008, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 23.2.2007

Репутация: нет
Всего: нет



Спасибо, понял.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0909 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.