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

Дженерики в Java: упрощение сортировки и повышение типобезопасности

Дженерики (Generics) позволяют написать один метод/класс, работающий с разными типами, обеспечивая compile-time type safety (проверку типов на этапе компиляции).

Обобщённые методы (Generic Methods)

Один метод для аргументов разных типов. Правила:

Пример: печать массива любого типа


public class GenericMethodTest {
    public static <E> void printArray(E[] inputArray) {
        for (E element : inputArray) System.out.printf("%s ", element);
        System.out.println();
    }
    public static void main(String args[]) {
        Integer[] intArray = {1, 2, 3, 4, 5};
        Double[] doubleArray = {1.1, 2.2, 3.3, 4.4};
        Character[] charArray = {'H', 'E', 'L', 'L', 'O'};
        printArray(intArray);
        printArray(doubleArray);
        printArray(charArray);
    }
}

Результат:


Array integerArray contains: 1 2 3 4 5
Array doubleArray contains: 1.1 2.2 3.3 4.4
Array characterArray contains: H E L L O

Ограниченные параметры типа (Bounded Type Parameters)

Ограничение типов, которые можно передать. Синтаксис: <T extends UpperBound>. extends означает «extends» (классы) или «implements» (интерфейсы).

Пример: максимум из трёх Comparable объектов


public class MaximumTest {
    public static <T extends Comparable<T>> T maximum(T x, T y, T z) {
        T max = x;
        if (y.compareTo(max) > 0) max = y;
        if (z.compareTo(max) > 0) max = z;
        return max;
    }
    public static void main(String args[]) {
        System.out.printf("Max of %d, %d and %d is %d\n", 3, 4, 5, maximum(3, 4, 5));
        System.out.printf("Max of %.1f, %.1f and %.1f is %.1f\n", 6.6, 8.8, 7.7, maximum(6.6, 8.8, 7.7));
        System.out.printf("Max of %s, %s and %s is %s\n", "pear", "apple", "orange", maximum("pear", "apple", "orange"));
    }
}

Результат:


Max of 3, 4 and 5 is 5
Max of 6.6, 8.8 and 7.7 is 8.8
Max of pear, apple and orange is pear

Обобщённые классы (Generic Classes)

Объявление класса с параметром типа после имени: class Box<T>. Могут иметь несколько параметров.

Пример: класс Box


public class Box<T> {
    private T t;
    public void add(T t) { this.t = t; }
    public T get() { return t; }
    public static void main(String[] args) {
        Box<Integer> integerBox = new Box<>();
        Box<String> stringBox = new Box<>();
        integerBox.add(10);
        stringBox.add("Hello World");
        System.out.printf("Integer Value: %d\n", integerBox.get());
        System.out.printf("String Value: %s\n", stringBox.get());
    }
}

Результат:


Integer Value: 10
String Value: Hello World

java

  1. Примитивные типы данных в Java: полное руководство с примерами
  2. Освоение операторов Java: типы, синтаксис и практические примеры
  3. Комментарии в Java: типы, использование и лучшие практики
  4. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  5. Освоение строк в Java: создание, методы и лучшие практики
  6. Интерфейсы в Java: концепции, реализация и лучшие практики
  7. Try-with-resources в Java: автоматическое управление ресурсами
  8. Аннотации в Java: типы, размещение и практические примеры
  9. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
  10. Освоение приведения типов в Java: от расширения к сужению и далее