Java. Что такое параметризированный или обобщенный тип? / What is a parameterized or generic type?

max аватар
116
Находится в разделах:

Обобщенный тип - это тип с формальными типами параметров. Параметризованный тип - это создание объекта обобщенного типа с реальными типами аргументов. 

 

Обобщенный тип - это ссылочный тип, который содержит один или более параметров. Эти типы параметров затем заменяются типами аргументов, во время создания объекта. 

Пример (обобщенный тип):

Интерфейс Collection содержит один параметр E. Тип параметра E - это всего лишь абстракция, которая позднее будет заменена реальным типом аргумента. Создание объекта обобщенного типа с реальными типами аргументов называется параметризованным типом.

Пример (параметризованный тип):

 

Объявление Collection<String> представляет собой параметризованный тип, что по сути представляет из себя создание объекта обобщенного типа Collection, где E будет заменено реальным типом String.

 

Как объявить обобщенный тип?

Также, как и регулярный тип, но с присоединенным объявлением типа параметра

 

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

 

Пример обобщенного типа:

Класс Pair имеет два параметра X и Y. Они заменяются типами аргументов во время создания объекта обобщенного типа Pair. Например, в объявлении Pair<String, Date>, тип параметра X заменен типом аргумента String, а Y заменен на Date. Область видимости X и Y - целое определение класса. 

 

Есть ли такие типы, которые не могут иметь параметров?

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

 

Почти все ссылочные типы могут быть обобщенными. Это классы, интерфейсы, вложенные (статические) классы, вложенные интерфейсы, локальные классы. 

Следующие типы не могут быть обобщенными:

Анонимные вложенные классы.  Они могут реализовывать параметризованный интерфейс или наследоваться от параметризованного класса, но они не могут быть обобщенными сами по себе. Анонимные классы не имеют имен, но имя обобщенного класса является обязательным для объявления и создания объекта класса. 

Классы исключений. обобщенный класс не должен явно или косвенно быть унаследован от класса Throwable. Обобщенное исключение или типы ошибок не разрешены, поскольку механизм отлова исключений - это механизм времени выполнения, а виртуальная машина ничего не знает об обобщенных типах и классах. 

Типы перечислений. Перечисления не могут иметь типизированных параметров. Концептуально, тип перечисления и его значения - статичны, а поскольку параметризированные типы не могут быть использованы в статическом контексте, параметризация типа перечисления невозможна. 


Конец
Альберт Эйнштейн склоняется к тому, что тот, кто хочет видеть результаты своего труда немедленно, должен идти в сапожники.

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке