Generics в Java
Last updated: 4 мая 2025 г.Если мы хотим сделать класс более гибким в плане типов, которые в нем используются, то можно воспользоваться обобщениями (generics
).
Класс в примере ниже является обобщенным, так как в нем используется универсальный параметр с именем T.
Имя, кстати, не обязательно должно быть именно символом T
, а может быть вообще любой символ или набор символов, какой мы захотим. T
— это не настоящий тип, он универсальный, или можно сказать неопределенный, или просто “какой-то тип”.
Настоящий же тип становится на место ненастоящего при создании объекта данного обобщенного класса. При создании объекта данного класса вместо T
будет указываться нужный настоящий тип, который будет подставлен вместо всех T
в коде класса. То есть при написании класса мы не знаем заранее, какой тип мы захотим использовать, когда будем создавать объект этого класса.
Гибкость в плане типов внутри класса очевидна.
То есть код класса один (этот код обобщенный, универсальный), а исполняться он может с любым типом, который программист захочет подставить вместо T
, когда будет создавать объект.
Универсально? Универсально.
Поясним на примере:
1class Account < T > {
2
3 private T id;
4 private int sum;
5
6 Account(T id, int sum) {
7 this.id = id;
8 this.sum = sum;
9 }
10
11 public T getId() {
12 return id;
13 }
14
15 public int getSum() {
16 return sum;
17 }
18
19 public void setSum(int sum) {
20 this.sum = sum;
21 }
22}
23
24public class Generics {
25 public static void main(String[] args) {
26 // Здесь вместо ненастоящего T в <>
27 // передается настоящий String.
28 Account < String > acc1 = new Account < String > ("23d4g5", 5000);
29 // То есть представьте, что вместо T
30 // в классе выше везде String,
31 // и на основе этого класса со String вместо T
32 // создается объект acc1.
33 String acc1Id = acc1.getId(); // выводим String id
34 System.out.println(acc1Id);
35
36 // Здесь вместо T передается Integer
37 Account < Integer > acc2 = new Account < Integer > (234545, 5000);
38 Integer acc2Id = acc2.getId(); // выводим Integer id
39 System.out.println(acc2Id);
40 }
41}
Вывод:

Следующие уроки
Приведение типов
8
мин.
Типы строк в Java
7
мин.
Классы обертки
7
мин.