Использование дженериков


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

Поскольку эта функция часто используется с коллекциями, мы сосредоточимся на коллекциях. Generics позволяет пользователю установить тип коллекции, чтобы ограничить типы объектов, которые могут быть вставлены в коллекцию. Пользователю также не нужно приводить значения, полученные из коллекции.

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

List<String> names = new ArrayList<>();

Обобщения в объявлении класса

Вы также можете использовать дженерики для определения класса:

public class YourClass<Class1,Class2>{
    private Class1 bob1;
    private Class2 bob2;
    Abc(Class1 a, Class2 b){
        this.bob1 = a;
        this.bob2 = b;
    }
    public Class1 getBob1() {
        return (this.bob1);
    }
    public Class2 getBob2() {
        return (this.bob2);
    }
}

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

YourClass<String, Integer> leBobs = new YourClass<>("words",42);  //in this case, <> is the same as putting <String, Integer>
String a=leBobs.getBob1();
int b=leBobs.getBob2();
System.out.println("bob1 is '" + a + "', and bob2 is '" + b + "'.");

Чтобы изменить типы bob1и bob2просто изменить классы, когда вы объявляете объект класса .<>YourClass

Примечание: вы не можете использовать примитивы для дженериков, если не используете их версию класса: т.е. <~~ int ~~ Integer> или <~~ bool ~~ Boolean>

Упражнение

Исправьте класс FavoriteClasses, чтобы использовать универсальные шаблоны для его трех переменных, любимого1, любимого2 и любимого3, его конструктора и трех функций для возврата каждой переменной, а также исправления rв mainразделе.
Затем определите переменную класса FavoriteClasses и используйте «Hello», 67, 6.3 в качестве аргументов для конструктора, а при его определении используйте ваши любимые классы / типы, которые идут с тремя аргументами.