Читаем Философия Java3 полностью

public static void main(String[] args) {

LinkedStack Iss = new LinkedStack(); for(String s : "Phasers on stun!".split(" ")) Iss.push(s);

String s;

while((s = Iss.popO) != null) System.out.printin(s);

}

} /* Output-

stun!

on

Phasers *///:-

Внутренний класс Node тоже является параметризованным и имеет собственный параметр типа.

Для определения наличия элементов в стеке в этом примере используется предохранитель (end sentinel). Он создается при конструировании LinkedStack, а затем при каждом вызове push() новый объект Node создается и связывается с предыдущим Node. При вызове рор() всегда возвращается top.item, после чего текущий объект Node уничтожается и происходит переход к следующему — если только текущим элементом не является предохранитель; в этом случае переход не выполняется. При повторных вызовах рор() клиент будет получать null, что свидетельствует об отсутствии элементов в стеке.

RandomList

Рассмотрим еще один пример контейнера: допустим, вам понадобилась особая разновидность списка, которая случайным образом выбирает один из своих элементов при вызове select(). Так как класс должен работать для любых объектов, мы воспользуемся параметризацией:

//• generics/RandomList.java import java.util.*;

public class RandomList {

private ArrayList storage'= new ArrayList(), private Random rand = new Random(47); public void add(T item) { storage.add(item); } public T selectО {

return storage.get(rand.nextInt(storage.si ze()));

}•

public static void main(String[] args) {

RandomList rs = new RandomList(); for(String s: ("The quick brown fox jumped over " + "the lazy brown dog").splitC "))

rs. add (s); продолжение & for(int i = 0; i < 11; i++)

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 { T nextO; } ///:-

Возвращаемое значение метода 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:

}

} Hill-. generics/coffee/Latte.java package generics.coffee; public class Latte extends Coffee {} Hill \ generics/coffee/Mocha.java package generics.coffee; public class Mocha extends Coffee {} Hill : generics/coffee/Cappuccino.java package generics.coffee; public class Cappuccino extends Coffee {} Hill : generics/coffee/Americano.java package generics.coffee;

public class Americano extends Coffee {} /// ~

//. generics/coffee/Breve java

package generics coffee.

public class Breve extends Coffee {} ///:-

Теперь мы можем реализовать интерфейс Generator, который создает случайные типы объектов из иерархии Coffee:

// generics/coffee/CoffeeGenerator.java

// Генератор случайных объектов из иерархии Coffee-

package generics coffee.

import java util *,

import net mindview util.*,

public class CoffeeGenerator

implements Generator, Iterable {

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 е) {

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных