Обобщенные шаблоны — это способ создания типобезопасных классов и методов, которые могут работать с объектами разных типов и обнаруживать ошибки типов во время компиляции, а не во время выполнения.
Он представлен в версии 5.2.
общественный класс GenericClass{частный конечный элемент T; public GenericClass(T item) {this.item = item; } Общественный T getItem () {возвращаемый элемент; } }
частный статическийvoid printItem(T item) {System.out.println(item.toString()); }
Он используется для ограничения или привязки к определенным типам или их подтипам.
Это позволит нам вызывать методы ограниченных классов или интерфейсов.
частный статическийdouble add(T numOne, T numTwo) {return numOne.doubleValue() + numTwo.doubleValue(); }
Это функция, которая позволяет компилятору автоматически определять тип универсального метода или параметра конструктора.
Listlist = new ArrayList<>();
Это символ >
, используемый для обозначения аргумента неизвестного типа.
Private static void printItemsInList(List> list) {for (Элемент объекта: список) {System.out.println(item); } }
Он используется для указания того, что аргумент типа должен быть подтипом определенного класса или интерфейса.
Он используется для доступа к элементам.
Private static void printItemsInList(List Extends Number> list) {for (Number Number: list) {System.out.println(number); } }
Он используется для указания того, что аргумент типа должен быть супертипом определенного класса или интерфейса.
Он используется для изменения элементов.
Список супер Число> номера = новый ArrayList<>();numbers.add(10);numbers.add(10.2);numbers.add(10.4f);System.out.println(numbers);
Тип безопасности
типы данных исправляются во время компиляции, а не во время выполнения, что делает код более устойчивым и надежным.
Возможность повторного использования кода
писать классы и методы, которые могут работать с несколькими типами данных, что может помочь уменьшить объем кода, который вам нужно написать.
Производительность
повысить производительность за счет уменьшения необходимости приведения типов и устранения накладных расходов на проверку типов во время выполнения.
Тип стирания
это ключевая функция, поскольку она стирает общий код во время выполнения, что может ограничить полезность обобщений в определенных ситуациях.
Ограниченная поддержка примитивных типов
Обобщенные типы в Java не поддерживают напрямую примитивные типы, такие как int или double. Вместо этого вы должны использовать соответствующие им классы-оболочки, такие как Integer или Double. Это может быть менее эффективно, чем прямая работа с примитивными типами.
Сложность
может усложнить код, использующий сложные иерархии типов и подстановочные знаки.