Топ-100Generics в Java - CodOrbits
LogoCodOrbits

Раздел: Java Core

Раздел охватывает ключевые возможности языка Java: аннотации, исключения, generics, лямбда-выражения, интерфейсы и другие базовые концепции.

Все разделы
Иконка Java Core

Generics в Java

Last updated: 4 мая 2025 г.

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

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

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

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

Example

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

То есть код класса один (этот код обобщенный, универсальный), а исполняться он может с любым типом, который программист захочет подставить вместо 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
мин.

Similar Articles Icon
Divider

Типы строк в Java

7
мин.

Similar Articles Icon
Divider

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

7
мин.

Similar Articles Icon