Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668

Generics extends super with ? differencies

08.03.2014, 17:00. Показов 1975. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
плохо понимаю генерики в java, но руководствуясь бытовой логикой пишу 2 ассиметричных примера.
общая часть:
Java
1
2
3
 class A1{}
class B1 extends A1{}
class C1 extends B1{}

первый пример:
Java
1
2
3
4
5
6
public static void main(String[] args){
        List<? extends B1> list = new ArrayList<C1>();
        list.add(new A1());//error
        list.add(new B1());//error
        list.add(new C1());//error
    }
второй пример:
Java
1
2
3
4
5
6
  public static void main(String[] args){
        List<? super B1> list = new ArrayList<A1>();
        list.add(new A1());//error
        list.add(new B1());//valid
        list.add(new C1());//valid
    }
Почему в 1 случае ошибка в 3 случаях, а во втором только в первом?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.03.2014, 17:00
Ответы с готовыми решениями:

Наследование extends и super
Здравствуйте! Какое значение несёт в себе super в этом методе? public void addListener(ChangeListener&lt;? super String&gt;...

<? extends E> и <? super E>
class One class Two extends One class Three extends Two One one = new One(); Two two = new Two(); ...

Преимущества использования Generics <T super SomeClass>
Здравствуйте, уже не могу просто, тугой я совсем, если не разберусь с этим вопросом не успокоюсь. Собственно вопрос вот в чем. Обычно не...

5
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
08.03.2014, 17:07
Лучший ответ Сообщение было отмечено gredwhite как решение

Решение

Смотрите всегда только на тип переменный, который видит компилятор.
1.
Java
1
2
3
4
List<? extends B1> list;
list.add(new A1());
list.add(new B1());
list.add(new C1());
Так как "настоящий" тип list-а - какой-то неизвестный наследник B1, то мы не можем гарантировать, что туда можно добавлять объект какого-то конкретного типа.

2.
Java
1
2
3
4
 List<? super B1> list;
list.add(new A1());//error
list.add(new B1());//valid
list.add(new C1());//valid
Так как мы точно знаем что настоящий тип list-а - какой-то родитель B1, то, естественно, туда можно ложить объект любого класса-наследника B1. Так как A1 не является классом наследником B1 - получаем ошибку.

Статья по теме - http://www.rsdn.ru/article/java/genericsinjava.xml
1
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
08.03.2014, 23:19  [ТС]
кстати есть ещё один кейс, когда просто <?>

Тоже ничего добавить нельзя.

Добавлено через 9 минут
turbanoff, Я так понимаю final классы для этого случая всё равно не помогут ?

Добавлено через 5 часов 18 минут
turbanoff, реально прочитал статью, но мало что понял из нее.

Добавлено через 17 минут
List и List<?> вообще чем-то отличаются?
0
237 / 236 / 72
Регистрация: 02.07.2013
Сообщений: 881
09.03.2014, 15:49
Цитата Сообщение от gredwhite Посмотреть сообщение
List и List<?> вообще чем-то отличаются?
после компиляции ничем не будет отличаться. <?> это пустота.
Все это остается на вашей совести
0
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
09.03.2014, 18:04  [ТС]
это только после
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
09.03.2014, 19:06
Цитата Сообщение от gredwhite Посмотреть сообщение
List и List<?> вообще чем-то отличаются?
старая и новая версия записи, новая - после добавления generics в java
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.03.2014, 19:06
Помогаю со студенческими работами здесь

extends
Я вот читаю про ООП в PHP. Там написано, что extends говорит, что этот класс расширяет тот, класс, &quot;от которого он extends&quot;. Вот...

extends
Здравствуйте у меян такой вопрос мб кто нибудь знает. Допустим есть 2 класса class t1 { } class t2 extends t1 {}

implements, extends
Всем привет. Вот конструкция: class MyGenClass&lt;T extends Comparable&lt;T&gt;&gt; Почему мы при параметризации должны писать extends, а не...

Jinja2 extends
Добрый день! Подскажите, использую базовый шаблон html-страницы для создания новых путем расширения через extends Дело в том, что в...

TypeScript | extends error
Собственно, сделал такой класс: class trueDate extends Date { constructor(date: string) { super(date) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru