Generics в Java

Если мы хотим сделать класс более гибким в плане типов, которые в нем используются, то можно воспользоваться обобщениями (generics).

Класс в примере ниже является обобщенным, так как в нем используется универсальный параметр с именем T.

Имя, кстати, не обязательно должно быть именно символом T, а может быть вообще любой символ или набор символов, какой мы захотим. T — это не настоящий тип, он универсальный, или можно сказать неопределенный, или просто “какой-то тип”.

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

Example

Гибкость в плане типов внутри класса очевидна.

То есть код класса один (этот код обобщенный, универсальный), а исполняться он может с любым типом, который программист захочет подставить вместо T, когда будет создавать объект.

Универсально? Универсально.

Поясним на примере:

class Account < T > { private T id; private int sum; Account(T id, int sum) { this.id = id; this.sum = sum; } public T getId() { return id; } public int getSum() { return sum; } public void setSum(int sum) { this.sum = sum; } } public class Generics { public static void main(String[] args) { // Здесь вместо ненастоящего T в <> // передается настоящий String. Account < String > acc1 = new Account < String > (“23d4g5”, 5000); // То есть представьте, что вместо T // в классе выше везде String, // и на основе этого класса со String вместо T // создается объект acc1. String acc1Id = acc1.getId(); // выводим String id System.out.println(acc1Id); // Здесь вместо T передается Integer Account < Integer > acc2 = new Account < Integer > (234545, 5000); Integer acc2Id = acc2.getId(); // выводим Integer id System.out.println(acc2Id); } }

Вывод:

Приведение типов

Узнайте, как работает приведение типов в Java: автоматическое преобразование и ручное приведение. Примеры кода и важные правила.
Time to read: 8

Типы строк в Java

String vs StringBuffer vs StringBuilder: сравнение эффективности работы со строками в Java. Узнайте, когда какой тип использовать для оптимизации.
Time to read: 7

Классы обертки

Изучите классы-обертки в Java (Integer, Char, Float): их назначение, отличие от примитивов и возможность хранения null. Примеры использования.
Time to read: 7