JavaRush /Java блог /Random /Generics в Java (практика)
Нина Можарская
17 уровень
Киев

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)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Стас Пасинков Уровень 26 Master
22 апреля 2019
да, неплохо :) но само задание не совсем подходит для описания дженериков, так как конкретно в этом случае можно обойтись и вовсе без дженериков.

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));
			}
		}
	}
}
так тоже должно работать, но я не проверял :)