Для закрепления лекционного материала попрактикуемся в том, как создавать дженерики.
Создайте типизированный класс Box
. Для того чтобы класс стал дженериком, после указания имени класса добавьте параметр T
в треугольных скобках <>
:
class Box<T>{
}
Класс Box
будет обладать лишь одним полем private T obj
, значение которого может быть получено через конструктор класса. Конструктор класса будет выглядеть следующим образом:
public Box(T obj) {
this.obj = obj;
}
Обратите внимание, что конкретный тип переменной, передаваемой в качестве параметра в конструктор, на данном этапе не указывается. Вместо этого используется параметр T
, который будет заменен на реальный тип в момент создания объекта.
Для работы с полем класса, добавьте два метода setObj()
и getObj()
:
public void setObj(T obj) {
this.obj = obj;
}
public T getObj() {
return this.obj;
}
В данном случае метод setObj()
по своему синтаксису напоминает приведенный выше конструктор класса. А вот метод getObj()
примечателен тем, что в качестве возвращающего объекта он вернет объект типа T
.
Для проверки того, что параметр T
действительно может быть разным для разных объектов класса Box
, переопределим метод toString()
, который будет выводить значение и тип объекта obj
:
@Override
public String toString() {
return "Box{" +
"obj=" + obj +
"; objType=" + obj.getClass().getName() +
'}';
}
Создадайте несколько экземпляров класса Box
, используя при этом различные типы:
public class Main {
public static void main(String a[]) {
// параметризируем класс типом String
Box<String> sample1 = new Box<>("Нетология");
System.out.println(sample1);
// параметризируем класс типом Integer
Box<String> sample2 = new Box<>(1);
System.out.println(sample2);
// параметризируем класс типом Boolean
Box<Boolean> sample3 = new Box<>(Boolean.TRUE);
System.out.println(sample3);
}
}
Обратите внимание на то, что здесь использован так называемый алмазный синтаксис, который позволяет указывать тип параметра только с левой стороны выражения.
В коде закралась ошибка. Поправьте ее и оставьте комментарий. Опишите причину ошибки и ее решение.
В результате выполнения программы, в консоле вы должны увидеть следующие строки:
Box{obj=Нетология; objType=java.lang.String}
Box{obj=1; objType=java.lang.Integer}
Box{obj=true; objType=java.lang.Boolean}