JavaRush/Java блог/Random/Generics в Java (практика)

Generics в Java (практика)

Статья из группы Random
участников
Создать класс со списком объектов произвольной природы (любой класс). Класс включает в себя метод, который называется PrintList с логическим параметром. Метод выводит на консоль нечетные или четные элементы списка, взависимости от величины параметра (true или false).
  1. Строим обобщенный класс
  2. Объявляем ArrayList c параметрическим типом (создаем список)
  3. Создаем метод, заполняющий список данными
  4. Создаем метод, печатающий либо четные либо нечетные значения
public class PrintList<T> {
	private ArrayList<T> list = null;

	public PrintList() {
		list = new ArrayList<T>();
	}

	public void add(T data) {
	list.add(data);
	}
public void printList(boolean isOdd) {
		int size = list.size();
	if (isOdd) {
		for (int i = 1; i < size; i += 2) {
			System.out.println(list.get(i).toString());
		}
	} else{
		for (int i = 0; i < size; i += 2) {
			System.out.println(list.get(i).toString());
	}}}

}
Создаю объект класса PrintList, но с конкретным классом String вместо параметрического типа. Заполняю список. Он будет состоять из 10 строк. И теперь если plS.printList(true), то выведутся четные строки. А если plS.printList(false), то нечетные.
public static void main(String[] args) {
	PrintList<String> plS = new PrintList<String>();
	for (int i = 0; i < 10; i++){
		plS.add("" + i);
	}
	plS.printList(true);
Затем создаю объект класса PrintList только вместо String используется Integer и выводятся нечетные значения.
PrintList<Integer> plI = new PrintList<Integer>();
	for (int i = 0; i < 10; i++){
		plI.add(i);
	}
	plI.printList(false);
}
Комментарии (6)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас Пасинков Software Developer в Zipy Master
22 апреля 2019, 21:55
да, неплохо :) но само задание не совсем подходит для описания дженериков, так как конкретно в этом случае можно обойтись и вовсе без дженериков.
public class PrintList {
	private List list;

	public PrintList() {
		list = new ArrayList();
	}

	public void add(Object data) {
		list.add(data);
	}

	public void printList(boolean isOdd) {
		int size = list.size();
		if (isOdd) {
			for (int i = 1; i < size; i += 2) {
				System.out.println(list.get(i));
			}
		} else {
			for (int i = 0; i < size; i += 2) {
				System.out.println(list.get(i));
			}
		}
	}
}
так тоже должно работать, но я не проверял :)
Нина Можарская
Уровень 17
23 апреля 2019, 06:15
Любую задачу можно решить разными способами. :)
Стас Пасинков Software Developer в Zipy Master
23 апреля 2019, 09:53
да, но вот если бы в задаче требовался бы метод, который бы возвращал объект из коллекции, или даже список объектов - то тут да, возвращать просто Object или List<Object> - не круто)) и в таком случае пригодились бы дженерики, где наши методы возвращали бы котика, или списки котиков))
Роман И Backend Developer в СберТех
23 апреля 2019, 15:30
Стас, все коллекции ориентированы на хранение какой то сущности. отсутствие ромба, что означает??
Роман И Backend Developer в СберТех
23 апреля 2019, 15:32
Он предлагает придумать способ, который действительно требует Обобщений. Например, класс который будет содержать либо сообщение-команду, либо сообщение-файл. Нина, предлагаю Вам сделать метод который подойдёт для обработки разных классов.
Сергеев Виктор
Уровень 40
Master
23 апреля 2019, 16:41
отсутствие ромба = отсутствие типизации, значит лист типизирован Object'ом