В чем разница между Set и Set. Пример использования Set

В чем разница между Set и Set со знаком вопроса. Пример использования Set

В этой статье мы разберемся что значит знак вопроса в Set<?>. Такая запись означает, что множество может содержать элементы любого типа, но и просто Set может содержать элементы любого типа — так в чем же разница между ними?

Особенности использования Set<?>

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

Давайте проанализируем код выше:

Зная тот факт, что Set<?> может принимать любой тип элементов, мы просто используем объект типа Object для того, чтобы обойти все элементы множества.

Теперь рассмотрим такую ситуацию:

В методе changeSet() множество определено как <?>, а это значит, что мы точно не знаем данные какого типа в нем есть, следовательно мы ничего в это множество добавить не можем. Исключение составляет лишь null.

Если переписать представленный выше метод в виде:

Множество Set не имеет таких ограничений. Однако используя такой подход может привести к возможным ошибкам в дальнейшем.

Где использовать Set<?> и чем он полезен?

Давайте рассмотрим случай когда Set<?> реально полезен:

Как видите, Set<?> полезен в утилитных методах, которые как-то обрабатывают элементы множества, не изменяя саму колекцию.

Если Вы хотите использовать родовые типы, но не знаете фактический тип коллекции, то Set<?> также Ваш выбор.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *