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

Слово Generics означает параметризованные типы. Это означает, что он позволит типу (String, Integer, пользовательским типам и т. д.) быть параметром в интерфейсах, классах и методах. Таким образом, любой интерфейс, класс или метод могут использовать любой тип данных (только ссылочные типы) с этой концепцией дженериков. Проще говоря, это позволяет пользователю выбирать тип данных, который может использоваться конструктором класса, и метод, который делает это возможным динамически. наконец, мы можем сделать вывод, что с помощью дженериков можно создавать классы, работающие с разными типами данных.

Общий класс

Мы можем использовать ‹› для указания типа параметра при создании универсального класса. Однако важно отметить, что мы не можем использовать примитивные типы данных, такие как int, char или double. Посмотрите на приведенный ниже код, где мы создали универсальный класс.

Output
50
Hello world

Как мы видим выше, мы создали класс с именем «GenericClass», где тип класса установлен на «Тип», и мы объявили объект типа «Тип». Затем в основном классе мы сначала создали экземпляр класса типа Integer, а затем типа String, и вывод этих двух можно рассматривать соответственно как вывод.

Также обратите внимание, что в универсальный класс можно передать несколько параметров типа. Проще говоря, мы можем иметь несколько параметров с разными типами, передаваемыми в класс. Посмотрите на приведенный ниже пример фрагмента кода.

Output
50
Hello World

Как видно из приведенного выше фрагмента кода, мы объявили 2 типа объектов, один из которых имеет тип «Тип», а другой — тип «S». Мы видим, что мы можем использовать несколько параметров Type в классе Generic.

Концепции диких карт

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

Единственное ограничение или ограничение концепции подстановочных знаков заключается в том, что ее нельзя использовать в качестве аргумента типа в качестве дженериков при ее вызове.

В Java есть 3 типа концепций подстановочных знаков, а именно:

· Верхняя граница

· Нижняя граница

· Без ограничений

Верхняя граница

Это похоже на ограниченные типы в дженериках. Этот метод позволяет нам использовать все подтипы определенного класса в качестве типизированного параметра.

Это ограничивает неизвестный тип определенным типом или подтипом.

Например, если некоторая функция хочет принять тип Number и его подтипы, мы можем сделать это возможным, просто добавив “?”, за которым следует extend и имя класса.

Посмотрите на фрагмент кода ниже, чтобы понять его лучше.

В приведенном выше фрагменте кода объект коллекции принимается в качестве параметра с типом параметра в качестве подкласса класса Number. Однако, если вы передадите любой другой тип, кроме типа подкласса числа, вы получите ошибку. ("передача строки вызовет ошибку").

Нижняя граница

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

Чтобы создать карту с нижней границей, мы можем сделать это, добавив «?» за которым следует ключевое слово super и имя класса.

В приведенном выше фрагменте кода объект коллекции принимается, как и раньше, с типом параметра, являющимся суперклассом класса Integer. Опять же, как и раньше, если передается объект коллекции с параметром типа, отличным от целочисленного класса и его супертипа, код выдаст ошибку компиляции.

Неограниченный

Это позволяет использовать все подтипы неизвестного типа. Здесь принимается любой объектный тип параметра.

Чтобы использовать это, мы просто добавляем "?" в качестве типизированного параметра внутри квадратных скобок.

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

Я надеюсь, что эта статья о кратком введении в общие понятия и концепции подстановочных знаков помогла вам лучше и яснее понять обсуждаемые темы. Пожалуйста, не стесняйтесь оставлять отзывы о вышеизложенном и подписывайтесь на другие статьи, связанные с этим и многим другим!