Skip to content

Latest commit

 

History

History
73 lines (60 loc) · 3.83 KB

README.md

File metadata and controls

73 lines (60 loc) · 3.83 KB

Задача 1: Первый дженерик-класс

Описание

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

Создайте типизированный класс 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}