|
24 / 21 / 3
Регистрация: 04.11.2014
Сообщений: 283
|
|||||||||||
Обобщения в Java25.07.2018, 19:27. Показов 1196. Ответов 12
Доброго времени суток, вот изучаю обобщения и в моей голове что-то сломалось. Читаю на сайте Оракла следующее:
Кликните здесь для просмотра всего текста
Bounded Types Oftentimes there are cases where we need to specify a generic type, but we want to control which types can be specified, rather than keeping the gate wide open. Bounded types can be used to restrict the bounds of the generic type by specifying the extends or the super keyword in the type parameter section to restrict the type by using an upper bound or lower bound, respectively. For instance, if you wish to restrict a type to a specific type or to a subtype of that specific type, use the following notation: <T extends UpperBoundType> Similarly, if you wish to restrict a type to a specific type or to a supertype of that specific type, use the following notation: <T super LowerBoundType> Пишу простые две строчки, но они работают наоборот: Первый вариант работает, хоть и указано, что передаваемый тип данных коллекции должен быть суперклассом для ограничения, то есть тип, который является суперклассом для Number. А второй вариант не работает, хоть я и указал, что типы данных, которые могут быть переданы должны наследоваться от Number, а тип Double как раз и наследуется от Number. В чем я ошибаюсь, подскажите пожалуйста.
0
|
|||||||||||
| 25.07.2018, 19:27 | |
|
Ответы с готовыми решениями:
12
Обобщения |
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
|||
| 25.07.2018, 19:34 | |||
|
А здесь
0
|
|||
|
24 / 21 / 3
Регистрация: 04.11.2014
Сообщений: 283
|
|
| 25.07.2018, 19:46 [ТС] | |
|
iSmokeJC, а разве не наоборот написано? Вот же прямо прямым текстом написано (С сайта оракла):
For instance, if you wish to restrict a type to a specific type or to a subtype of that specific type, use the following notation: <T extends UpperBoundType> - если вы хотите ограничить тип, определенным типом или его субклассами используйте эту нотацию.
0
|
|
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
||||||||
| 25.07.2018, 19:55 | ||||||||
|
Тогда какой в этом смысл? Если ограничить тип тупо Number, то в него можно записать и инт без всяких выкрутасов. Так ведь?
Это к слову про
0
|
||||||||
|
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
|
|||||||
| 25.07.2018, 21:19 | |||||||
0
|
|||||||
|
24 / 21 / 3
Регистрация: 04.11.2014
Сообщений: 283
|
|
| 25.07.2018, 23:37 [ТС] | |
|
vcrop, так вот и я о том же, так почему наоборот в том, что я написал в шапке?
0
|
|
|
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
|
|
| 26.07.2018, 00:03 | |
|
List<? extends Number> gen;
List параметрирован неизвестным классом, унаследованным от Number. Ты добавляешь Double. Но это может быть List<Integer>, List<BigDecimal> и т.д. Ты хочешь в List<Integer> видеть Double?
0
|
|
|
24 / 21 / 3
Регистрация: 04.11.2014
Сообщений: 283
|
|
| 26.07.2018, 01:04 [ТС] | |
|
vcrop, так Double тоже наследуется от Number
0
|
|
|
75 / 61 / 29
Регистрация: 20.04.2015
Сообщений: 415
|
||||||
| 26.07.2018, 12:38 | ||||||
|
да дело в том что ?extends Number не может гарантировать что ты там будешь содержать чисто Integer или чисто Double т.е. это нарушение идёт а дженерик у нас чтобы обеспечить типовую безопасность вот такое ? extends Number - используется для поисковых запросов чтобы мы возвращали лююбой тип который наследуется от Number
я тут маленько набрасал пример как этим пользоваться:
1
|
||||||
|
24 / 21 / 3
Регистрация: 04.11.2014
Сообщений: 283
|
||||||
| 26.07.2018, 12:44 [ТС] | ||||||
|
WinniPuh, Спасибо за пример, я понял, но тогда почему это может гарантировать типовую безопасность? Потому что выше по иерархии наследования только Object?
0
|
||||||
|
75 / 61 / 29
Регистрация: 20.04.2015
Сообщений: 415
|
|||||||||||||||||
| 26.07.2018, 14:07 | |||||||||||||||||
|
<? super Number> это значит что ты можешь запихать туда любой объект родительского класса Number и объекты самого класса Number
типо
Не по теме: я не вижу лайки вроде в этот раз не х ню.. сморозил:) Добавлено через 45 минут
0
|
|||||||||||||||||
|
24 / 21 / 3
Регистрация: 04.11.2014
Сообщений: 283
|
|
| 26.07.2018, 14:58 [ТС] | |
|
Вообще я кажется разобрался, дело в принципе PECS (Producer extends and Consumer super), который и определяет в случае коллекций wildcard (а не просто параметр типа, как я думал) extend как только как коллекцию для чтения, а super - позволяет изменять коллекцию. Об этом статья есть на хабре неплохая
https://habr.com/post/207360/
2
|
|
|
|
||||||
| 03.08.2018, 16:18 | ||||||
|
Можно привести к соответствующему типу оболочке, к Double, Integer ... и тд.
После этого добавить.
0
|
||||||
| 03.08.2018, 16:18 | |
|
Помогаю со студенческими работами здесь
13
Обобщения и интерфейсы Обобщения в интерфейсах Обобщения коллекций Создание обобщения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|