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