русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Обобщенный генератор


Дата добавления: 2015-06-12; просмотров: 630; Нарушение авторских прав


Следующий класс создает генератор для любого класса, обладающего конструктором по умолчанию. Для уменьшения объема кода в него также включен параметризованный метод для получения BasicGenerator:

//: net/mindview/util/BasicGenerator.java

// Автоматическое создание Generator для класса

// с конструктором по умолчанию (без аргументов)

package net.mindview.util;

 

public class BasicGenerator<T> implements Generator<T> {

private Class<T> type;

public BasicGenerator(Class<T> type){ this.type = type; }

public T next() {

try {

// Assumes type is a public class:

return type.newInstance();

} catch(Exception e) {

throw new RuntimeException(e);

}

}

// Получение генератора по умолчанию для заданного type:

public static <T> Generator<T> create(Class<T> type) {

return new BasicGenerator<T>(type);

}

}

Класс предоставляет базовую реализацию, создающую объекты класса, который (1) является открытым (так как BasicGenerator определяется в отдельном пакете, соответствующий класс должен иметь уровень доступа public, не ограничиваясь пакетным доступом), и (2) обладает конструктором по умолчанию (то есть конструктором без аргументов). Чтобы создать один из таких объектов BasicGenerator, следует вызвать метод create() и передать ему обозначение генерируемого типа, параметризованный метод create() позволяет использовать запись BasicGenerator.create(MyType.class) вместо более громоздкой конструкции new BasicGenerator<MyType>(MyType.class). Для примера рассмотрим простой класс с конструктором по умолчанию:

//: generics/CountedObject.java

public class CountedObject {

private static long counter = 0;

private final long id = counter++;

public long id() { return id; }

public String toString() { return "CountedObject " + id;}



}

Класс CountedObject отслеживает количество созданных экземпляров и включает его в выходные данные toString(). При помощи BasicGenerator можно легко создать Generator для CountedObject:

//: generics/BasicGeneratorDemo.java

import net.mindview.util.*;

 

public class BasicGeneratorDemo {

public static void main(String[] args) {

Generator<CountedObject> gen =

BasicGenerator.create(CountedObject.class);

for(int i = 0; i < 5; i++)

System.out.println(gen.next());

}

}

<spoiler text="Output:">

CountedObject 0

CountedObject 1

CountedObject 2

CountedObject 3

CountedObject 4

</spoiler> Как видите, применение параметризованного метода снижает объем кода, необходимого для получения объекта Generator. Раз уж механизм параметризации Java все равно заставляет вас передавать объект Class, его можно заодно ис­пользовать для вычисления типа в методе create().



<== предыдущая лекция | следующая лекция ==>
Явное указание типа | Упрощение работы с кортежами


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.218 сек.