Чтение онлайн

на главную - закладки

Жанры

Философия Java3

Эккель Брюс

Шрифт:

В этом разделе будут представлены некоторые готовые генераторы, но вы также сможете легко определить собственный генератор для своих потребностей.

Для начала рассмотрим простейший набор счетных генераторов для всех примитивных типов и String. Классы генераторов вложены в класс Counting-Generator, чтобы они могли обозначаться именами генерируемых объектов. Например, генератор, создающий объекты Integer, будет создаваться выражением new CountingGenerator.Integer:

//: net/mi ndvi ew/uti1/Counti ngGenerator.java //

Простые реализации генераторов, package net.mi ndvi ew.uti1;

public class CountingGenerator {

public static class

Boolean implements Generatorjava.lang.Boolean> { private boolean value = false; public java.lang.Boolean nextO {

value = lvalue; // Поочередное переключение return value;

}

}

public static class

Byte implements Generator<java.lang.Byte> { private byte value = 0;

public java.lang.Byte nextO { return value++; }

}

static char[] chars = ("abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray;

public static class

Character implements Generator<java.lang.Character> { int index = -1;

public java.lang.Character nextO {

index = (index + 1) % chars.length; return chars[index];

}

}

public static class

String implements Generator<java lang String> { private int length = 7;

Generator<java\lang.Character> eg = new CharacterO; public StringO {}

public String(int length) { this.length = length; } public java.lang.String nextO {

char[] buf = new char[length]; for(int i = 0; i < length; i++)

buf[i] = eg.nextO; return new java.lang.String(buf);

}

}

public static class

Short implements Generator<java.lang.Short> { private short value = 0;

public java.lang.Short nextO { return value++; }

}

public static class

Integer implements Generator<java.lang.Integer> { private int value = 0;

public java.lang.Integer nextO { return value++; }

}

public static class

Long implements Generator<java.lang.Long> { private long value = 0;

public java.lang.Long nextO { return value++; }

}

public static class

Float implements Generator<java.lang.Float> { private float value = 0; public java.lang.Float nextO { float result = value; value += 1.0; return result;

}

}

public static class

Double implements Generator java. lang Double> { private double value = O.'O; public java.lang.Double nextO { double result = value; value += 1.0; return result;

}

}

} ///:-

Каждый класс реализует некоторое понятие «счетности». В случае Counting-Generator.Character

это повторение символов верхнего и нижнего регистра. Класс CountingGenerator.String использует CountingGenerator.Character для заполнения массива символов, который затем преобразуется в String. Размер массива определяется аргументом конструктора. Обратите внимание на то, что CountingGenerator.String использует базовую конструкцию Generator<java.lang. Character вместо конкретной ссылки на CountingGenerator.Character.

Следующая тестовая программа использует рефлексию с идиомой вложенных генераторов, что позволяет применять ее для любого набора генераторов, построенного по указанному образцу:

//: arrays/GeneratorsTest.java import net.mindview.util.*;

public class GeneratorsTest {

public static int size = 10;

public static void test(Class<?> surroundingClass) {

for(Class<?> type : surroundingClass.getClassesO) {

System.out.print(type.getSimpleName + ": "); try {

Generator<?> g = (Generator<?>)type.newInstance; for(int i = 0; i < size; i++)

System.out printf(g.next + " "); System, out. printlnO; } catch(Exception e) {

throw new RuntimeException(e);

}

}

}

public static void main(String[] args) { test(CountingGenerator.class);

}

} /* Output;

Double; 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Float; 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Long; 0 12 3 4 5 6 7 8 9 Integer; 0 1 2 3 4 5 6 7 8 9 Short; 0 12 3 4 5 6 7 8 9

String: abcdefg hijklmn opqrstu vwxyzAB CDEFGHI JKLMNOP QRSTUVW XYZabcd efghijk lmnopqr Character: abcdefghi j Byte: 0 12 3 4 5 6 7 8 9

Boolean: true false true false true false true false true false *///:-

Предполагается, что тестируемый класс содержит серию вложенных объектов Generator, каждый из которых имеет конструктор по умолчанию (то есть без аргументов). Рефлексионный метод getClasses выдает информацию обо всех вложенных классах. Далее метод test создает экземпляр каждого генератора и выводит результаты, полученные при десятикратном вызове next.

Следующий набор генераторов основан на случайных числах. Так как конструктор Random инициализируется константой, результаты будут повторяться при каждом запуске программы:

//: net/mi ndvi ew/uti1/RandomGenerator.java // Генераторы, выдающие случайные значения, package net.mi ndvi ew.uti1; import java.util.*;

public class RandomGenerator {

private static Random r = hew Random(47);

public static class

Boolean implements Generator<java lang Boolean> { public java lang Boolean nextO { return r nextBooleanO;

Поделиться:
Популярные книги

Двадцать и двадцать один. Наивность

Das_Leben
Детективы:
триллеры
5.00
рейтинг книги
Двадцать и двадцать один. Наивность

Отряд

Посняков Андрей
Отряд тайных дел
Фантастика:
фэнтези
боевая фантастика
6.25
рейтинг книги
Отряд

Пчелы

Васильева Евгения Николаевна
Эврика
Научно-образовательная:
биология
6.25
рейтинг книги
Пчелы

Полное собрание сочинений в одной книге

Зощенко Михаил Михайлович
Проза:
классическая проза
русская классическая проза
советская классическая проза
6.25
рейтинг книги
Полное собрание сочинений в одной книге

Америка глазами эмигранта. Том 2

Мандалян Элеонора Александровна
Приключения:
прочие приключения
путешествия и география
5.00
рейтинг книги
Америка глазами эмигранта. Том 2

Сумерки божков

Амфитеатров Александр Валентинович
1. Романы
Проза:
русская классическая проза
5.00
рейтинг книги
Сумерки божков

Собрание военных повестей в одном томе

Быков Василий Владимирович
Проза:
военная проза
5.00
рейтинг книги
Собрание военных повестей в одном томе

Добыча

Ергин Дэниел
Деловая литература:
о бизнесе популярно
5.00
рейтинг книги
Добыча

Цивилизация статуса (сборник)

Шекли Роберт
Сборники Роберта Шекли
Фантастика:
фэнтези
8.22
рейтинг книги
Цивилизация статуса (сборник)

Том 10. Господа «ташкентцы». Дневник провинциала

Салтыков-Щедрин Михаил Евграфович
10. Собрание сочинений в двадцати томах
Проза:
русская классическая проза
6.25
рейтинг книги
Том 10. Господа «ташкентцы». Дневник провинциала

Римские фантазии (сборник)

Родари Джанни
Детские:
сказки
5.00
рейтинг книги
Римские фантазии (сборник)

Переписка и деловые бумаги

Чехов Антон Павлович
Документальная литература:
публицистика
5.00
рейтинг книги
Переписка и деловые бумаги

"Солдат удачи".Тетралогия

Авраменко Александр Михайлович
Фантастика:
боевая фантастика
7.46
рейтинг книги
Солдат удачи.Тетралогия

Шайтан Иван

Тен Эдуард
1. Шайтан Иван
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Шайтан Иван