Дженерики и вопросительный знак

Вы не можете обнаружить кодовую страницу

, Это - ясно ложь. Каждый веб-браузер имеет некоторый детектор универсального набора символов для контакта со страницами, которые не имеют никакого признака вообще кодирования. Firefox имеет тот. Можно загрузить код и видеть, как он делает это. См. некоторую документацию здесь . В основном это - эвристика, но тот, который работает действительно хорошо.

, Учитывая разумную сумму текста, даже возможно обнаружить язык.

Вот другой , я просто нашел Google использования:

16
задан guerda 3 December 2009 в 13:56
поделиться

5 ответов

Из учебного пособия по обобщениям. Спасибо Ответ Майкла !

Добавлять произвольные объекты небезопасно. к нему, однако:

 Коллекция  c = new ArrayList  ();
c.add (новый объект ()); // Ошибка времени компиляции

Поскольку мы не знаем, что за элемент тип c означает, мы не можем добавить возражает против этого. Метод add () принимает аргументы типа E, тип элемента коллекции. Когда на самом деле параметр типа?, это означает какой-то неизвестный тип. Любой параметр мы передать для добавления должен быть подтип этого неизвестного типа. Поскольку мы не знать, что это за тип, мы не можем пройти что-нибудь в. Единственное исключение - null, который является членом любого типа.

28
ответ дан 30 November 2019 в 15:08
поделиться

Вы, вероятно, захотите использовать List - именно так предполагается использовать Generics, то есть добавить информацию о том, какие объекты будут в коллекции. Если вы действительно собираетесь иметь список, содержащий смешанные типы (что обычно является признаком плохого дизайна), используйте List

. Для получения дополнительной информации об использовании подстановочных знаков см. Generics Учебник . Но на самом деле они актуальны только при определении ваших собственных универсальных классов или методов с универсальными параметрами.

18
ответ дан 30 November 2019 в 15:08
поделиться

Если вы используете , значит, вы не собираетесь нигде использовать параметризованный тип. Либо перейдите к определенному типу (в вашем случае это похоже на List ) или к очень общему List

16
ответ дан 30 November 2019 в 15:08
поделиться

Список означает, что список (или может быть) типизирован, но тип неизвестен **. Так что добавление к нему чего-либо может быть неправильным **, если вы оказались вне этого типа. Поскольку он неизвестен, вы получаете предупреждение.

Вы можете использовать List , что означает список, который может содержать любой тип .

2
ответ дан 30 November 2019 в 15:08
поделиться

Другой вариант в этом случае - объявить ваш список как

List<? super String>

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

Это компилируется и, на мой взгляд, немного лучше, чем Перечислите , поскольку он кодирует вашу неуверенность в том, что на самом деле может быть включено в список. По сути, вы можете только добавить к нему Strings, но когда вы вызываете get () , возвращаемый элемент может быть любым (и Java правильно определит этот тип как Object ).

На практике единственная разница между этим и List
8
ответ дан 30 November 2019 в 15:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: