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

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

Жанры

Философия Java3

Эккель Брюс

Шрифт:

for(Class<?> с : type.getlnterfacesO) result.add(c.getSimpleName); System.out.println(result);

}

static Set<String> object = methodSet(Object.class); static { object.add("clone"); } static void

differencesass<?> superset, Class<?> subset) {

System.out.pri nt(superset.getSimpleName +

" extends " + subset.getSimpleNameO + ", adds: "); Set<String> comp = Sets.difference(

methodSet(superset). methodSet(subset)); сотр.removeAll(object); // He показывать

методы 'Object' System.out.println(comp); interfaces(superset),

}

public static void main(String[] args) {

System.out.printlnC'Collection: " +

methodSet(Collection.class)), interfaces(Collection.class); difference(Set.class. Collection.class); difference(HashSet.class. Set.class); difference(LinkedHashSet.class, HashSet.class); difference(TreeSet.class. Set.class); differences st. class. Col 1 ecti on.cl ass); difference(ArrayList.class, List.class); differences nkedLi st. class. List.class); difference(Queue.class. Collection.class); di fference(Pri ori tyQueue.class. Queue.class); System.out.println("Map: " + methodSet(Map.class)); difference(HashMap.class. Map.class); difference(LinkedHashMap.class. HashMap.class); difference(SortedMap.class. Map.class); difference(TreeMap.class, Map class);

}

} ///:-

Анонимные внутренние классы

Параметризация также может применяться к внутренним классам и анонимным внутренним классам. Пример реализации интерфейса Generator с использованием анонимных внутренних классов:

//: generics/BankTeller.java

II Очень простая имитация банковского обслуживания.

import java.util.*;

import net.mindview.util.*;

class Customer {

private static long counter = 1; private final long id = counter++; private Customer {}

public String toStringO { return "Customer " + id; } // Метод для получения объектов Generator: public static Generator<Customer> generatorO { return new Generator<Customer>

public Customer nextO { return new CustomerO; }

class Teller {

private static long counter = 1; private final long id = counter++; private TellerO {}

public String toStringO { return "Teller " + id; } // Синглетный объект Generator: public static Generator<Teller> generator = new Generator<Teller> {

public Teller next О { return new TellerO; }

}:

}

public class BankTeller {

public static void serve(Teller t, Customer c) {

System.out.printin(t + " обслуживает " + с);

}

public static void main(String[] args) { Random rand = new Random(47); Queue<Customer> line = new LinkedList<Customer>; Generators.fillOine, Customer, generator 0, 15): List<Teller> tellers = new ArrayList<Teller>; Generators.filKtellers, Teller.generator, 4); for(Customer

с : line)

serve(tellers.get(rand.nextlnt(tellers.size)), c);

}

} /* Output:

Teller

3

обслуживает

Customer

1

Teller

2

обслуживает

Customer

2

Teller

3

обслуживает

Customer

3

Teller

1

обслуживает

Customer

4

Teller

1

обслуживает

Customer

5

Teller

3

обслуживает

Customer

6

Teller

1

обслуживает

Customer

7

Teller

2

обслуживает

Customer

8

Teller

3

обслуживает

Customer

9

Teller

3

обслуживает

Customer

10

Teller

2

обслуживает

Customer

11

Teller

4

обслуживает

Customer

12

Teller

2

обслуживает

Customer

13

Teller

1

обслуживает

Customer

14

Teller

1

обслуживает

Customer

15

*///•-

И Customer, и Teller содержат приватные конструкторы, поэтому для создания их объектов пользователь вынужден использовать объекты Generator. Customer содержит метод generator, который при каждом вызове создает новый объект Generator<Customer>. На случай, если множественные объекты Generator вам не понадобятся, в Teller создается синглетный открытый объект generator. Оба подхода продемонстрированы в вызовах fill внутри main.

Поскольку метод generator в Customer и объект Generator в Teller являются статическими, они не могут быть частью интерфейса, поэтому «обобщить» эту"

конкретную идиому не удастся. Несмотря на это обстоятельство, она достаточно хорошо работает в методе fill.

Построение сложных моделей

К числу важных преимуществ параметризации относится простота и надежность создания сложных моделей. Например, можно легко создать список (List) с элементами-кортежами:

//: generics/TupleList.java

// Построение сложных параметризованных типов путем объединения

import java.util.*;

import net.mindview util.*;

public class TupleList<A,B.C.D> extends ArrayList<FourTuple<A,B,C.D» {

public static void main(String[] args) {

TupleList<Vehicle, Amphibian. String. Integer> tl =

new TupleList<Vehicle. Amphibian, String. Integer>; tl.add(TupleTest.hO); tl.add(TupleTest.hO):

for(FourTuple<Vehicle.Amphibian.String.Integer> v tl) System.out.println(i);

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

Бастард Императора. Том 14

Орлов Андрей Юрьевич
14. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 14

Звездная Кровь. Экзарх III

Рокотов Алексей
3. Экзарх
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Экзарх III

Дважды одаренный. Том IV

Тарс Элиан
4. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
7.00
рейтинг книги
Дважды одаренный. Том IV

Неучтенный элемент. Том 8

NikL
8. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 8

Убийца

Бубела Олег Николаевич
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Убийца

Оживший камень

Кас Маркус
1. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Оживший камень

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Изгой Проклятого Клана. Том 5

Пламенев Владимир
5. Изгой
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 5

Законы Рода. Том 8

Мельник Андрей
8. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 8

Лекарь Империи 4

Карелин Сергей Витальевич
4. Лекарь Империи
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 4

Князь Целитель 4

Ткачев Андрей Юрьевич
4. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Князь Целитель 4

Имперец. Том 3

Романов Михаил Яковлевич
2. Имперец
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.43
рейтинг книги
Имперец. Том 3

Тыл-фронт

Головин Андрей
Проза:
военная проза
проза прочее
5.00
рейтинг книги
Тыл-фронт

Старый, но крепкий 8

Крынов Макс
8. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Старый, но крепкий 8