public static void main(String[] args) {
LinkedStack
String s;
while((s = Iss.popO) != null) System.out.printin(s);
}
} /* Output-
stun!
on
Phasers *///:-
Внутренний класс Node тоже является параметризованным и имеет собственный параметр типа.
Для определения наличия элементов в стеке в этом примере используется
RandomList
Рассмотрим еще один пример контейнера: допустим, вам понадобилась особая разновидность списка, которая случайным образом выбирает один из своих элементов при вызове select(). Так как класс должен работать для любых объектов, мы воспользуемся параметризацией:
//• generics/RandomList.java import java.util.*;
public class RandomList
private ArrayList
return storage.get(rand.nextInt(storage.si ze()));
}•
public static void main(String[] args) {
RandomList
rs. add (s);
System.out.printers.select О + " ");
}
} /* Output:
brown over fox quick quick dog brown The brown lazy brown
Параметризованные интерфейсы
Параметризация работает и с интерфейсами. Например, класс, создающий объекты, называется
Обычно генератор определяет всего один метод — тот, который создает объекты. Назовем его next() и включим в стандартный инструментарий:
//• net/mi ndvi ew/uti1/Generator.java
// Параметризованный интерфейс
package net.mi ndvi ew.uti1;
public interface Generator
Возвращаемое значение метода next() параметризовано по типу Т. Как видите, механизм параметризации работает с интерфейсами почти так же, как с классами.
Чтобы продемонстрировать, как работает реализация Generator, мы воспользуемся иерархией классов, представляющих разные виды кофе:
//: generics/coffee/Coffee.java package generics.coffee;
public class Coffee {
private static long counter = 0; private final long id = counter**; public String toStringO {
return getClassO.getSimpleNameО + " " + id:
}
public class Americano extends Coffee {} /// ~
//. generics/coffee/Breve java
package generics coffee.
public class Breve extends Coffee {} ///:-
Теперь мы можем реализовать интерфейс Generator
// generics/coffee/CoffeeGenerator.java
// Генератор случайных объектов из иерархии Coffee-
package generics coffee.
import java util *,
import net mindview util.*,
public class CoffeeGenerator
implements Generator
private Class[] types = { Latte class. Mocha.class.
Cappuccino class, Americano.class. Breve class. }; private static Random rand = new Random(47); public CoffeeGeneratorО {} //Для перебора-private int size = 0.
public CoffeeGenerator(int sz) { size = sz;' } public Coffee next О { try {
return (Coffee)
types[rand nextInt(types.length)] newlnstance(). // Сообщение об ошибках во время выполнения: } catch(Exception е) {