Погружение в Java Generics Вопросы по Java Generics очень часто любят задавать на технических интервью. И, на мой взгляд, этой темой владеть очень важно не только для успешного прохождения собеседования, но в принципе для того, чтобы создавать более стабильный и понятный код. Итак, Generics впервые появились в Java 5 и стали в своё время прорывной фичей, благодаря которой работать с объектами Java Collection Framework стало гораздо проще и безопаснее потому, что использование “дженериков” предотвращает кучу ошибок, связанных с некорректной типизацией, ещё на этапе компиляции кода. Начну с того, что перепишу класс Quote (https:/...29) public class Quote { private static Float price; public void setPrice(Float price){ this.price = price; } public Float getPrice(){ return this.price; } } с использованием Generics public class Quote<T> { private T t; public void set(T t){ this.t = t; } public T get(){ return this.t; } } Код заметно изменился и на первый взгляд стал более запутанным. Первое, что бросается в глаза – это новая конструкция <T>. Она называется Diamond. Подобные конструкции стали применяться в Java 7 и применяются до сих пор. Но остаётся открытым вопрос – что такое T? И будет ли вообще работать этот код? В Generics предусмотрено шесть видов нотаций: E – Element (элемент); K – Key (ключ); V – Value (значение); N – Number (число); T – Type (тип); S,U,V и т.д. в случае, если в конструкторе требуется указать более одного типа. И, да, этот код будет работать. Ниже прилагаю класс для проверки. public class Main { public static void main(String[] args) { Quote<Float> quote = new Quote<>(); quote.set(99f); System.out.println(quote.get()); } }
Дженерики спрашивают на собеседовании, поэтому предлагаю рассмотреть что это такое. В чем суть Дженериков: Под дженериками в Java подразумевают возможность добавлять к типам типы-параметры. Таким образом получаются сложные составные типы. Такой составной тип в общем случае выглядит так: ОсновнойТип <ТипПараметр> Пример:
ArrayList<Integer> list = new ArrayList<Integer>(); В данном примере мы создаем список list, который будет хранить в себе параметры типа int. Если же мы создадим список без Дженериков, то в наш список можно будет сохранять параметры любых типов...