Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Освоение Java Generics: создание переиспользуемого, типобезопасного кода

Java Generics — создание переиспользуемого, типобезопасного кода

Java generics позволяют написать один класс, интерфейс или метод, работающий со многими разными типами данных, сохраняя безопасность типов на этапе компиляции.

Примечание: Generics не работают с примитивными типами (int, float, char и т.д.).


Обобщённый класс в Java

Объявив параметр типа, можно создать класс, работающий с любым объектным типом.

Пример: создание обобщённого класса

class Main {
    public static void main(String[] args) {
        GenericsClass<Integer> intObj = new GenericsClass<>(5);
        System.out.println("Generic Class returns: " + intObj.getData());
        GenericsClass<String> stringObj = new GenericsClass<>("Java Programming");
        System.out.println("Generic Class returns: " + stringObj.getData());
    }
}

class GenericsClass<T> {
    private T data;
    public GenericsClass(T data) {
        this.data = data;
    }
    public T getData() {
        return this.data;
    }
}

Вывод

Generic Class returns: 5
Generic Class returns: Java Programming

В примере GenericsClass — обобщённый класс, где T — параметр типа. Созданы два экземпляра:


Обобщённый метод в Java

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

Пример: создание обобщённого метода

class Main {
    public static void main(String[] args) {
        DemoClass demo = new DemoClass();
        demo.<String>genericsMethod("Java Programming");
        demo.<Integer>genericsMethod(25);
    }
}

class DemoClass {
    public <T> void genericsMethod(T data) {
        System.out.println("Generics Method:");
        System.out.println("Data Passed: " + data);
    }
}

Вывод

Generics Method:
Data Passed: Java Programming
Generics Method:
Data Passed: 25

Когда компилятор может вывести тип, явный аргумент типа можно опустить:

demo.genericsMethod("Java Programming");

Ограниченные типы (Bounded Types)

Иногда нужно, чтобы обобщённый тип принимал только определённое семейство классов. Ограниченные типы достигают этого через ключевое слово extends.

Синтаксис: <T extends A> — T может быть A или любым подтипом A.

Пример: ограниченные типы

class GenericsClass <T extends Number> {
    public void display() {
        System.out.println("This is a bounded type generics class.");
    }
}

class Main {
    public static void main(String[] args) {
        // GenericsClass<String> obj = new GenericsClass<>(); // ошибка компиляции
    }
}

Здесь GenericsClass принимает только числовые типы (Integer, Double и т.д.). Попытка инстанцировать с String вызывает ошибку компиляции:

GenericsClass<String> obj = new GenericsClass<>();
^ reason: inference variable T has incompatible bounds
equality constraints: String
lower bounds: Number
where T is a type-variable: T extends Number declared in class GenericsClass

Преимущества Java Generics

1. Переиспользование кода

Обобщённый код работает с множеством типов данных, уменьшая дублирование. Один метод может обрабатывать целые, строки и пользовательские объекты.

2. Проверка типов на этапе компиляции

Так как параметр типа известен во время компиляции, компилятор может обнаружить несоответствия типов до запуска программы.

3. Бесшовная интеграция с коллекциями

Фреймворк коллекций Java основан на generics, позволяя коллекциям обеспечивать типобезопасность. Примеры:

ArrayList<String> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();

Другие классы коллекций (LinkedList, Queue, Map и т.д.) также используют generics для тех же преимуществ.

java

  1. Ключевое слово final в Java: переменные, методы и классы
  2. Оператор instanceof в Java: полное руководство с примерами
  3. Наследование в Java: концепции, типы и практические примеры
  4. Статические вложенные классы в Java: использование, отличия и примеры
  5. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  6. Паттерн Singleton в Java: как реализовать и безопасно использовать
  7. Рефлексия в Java: инспекция классов, методов и полей во время выполнения
  8. Мастерство Java ArrayList: операции, методы и лучшие практики
  9. Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
  10. Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление