2013-10-13 5 views
4

Я использую generics довольно широко для работы с коллекциями Java и Guava. Я понимаю, это довольно хорошо при использовании API:Ищите шаблоны и API-дизайн с Java-генераторами

  1. PECS правил
  2. {со, контра, в} дисперсия
  3. подстановочные
  4. Ограниченно дженерики

Однако я затрудняюсь для разработки API-интерфейсов с использованием дженериков. Существуют ли шаблоны проектирования для Java-дженериков? Также могут помочь любые ссылки на Java-дженерики. Я прочитал:

  1. Effective Java
  2. Книга 'Java Дженерики и Коллекции'
  3. http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

Я знаком только с двумя узорами, где дженерики полезны:

  1. Концепция сдерживания: коллекции Java, Guava Optional<T> и т. Д.
  2. Тип параметризация: гуавы Predicate<T>, Function<T>
+0

Если вы читали «Эффективная Java», то, как сказал Йода, «вам больше не нужна подготовка. Уже знаете, что вам нужно». – Vidya

ответ

1

Большинство стандартных шаблонов проектирования находятся в специальной полиморфизма, присущего стандартным OO с наследованием и композицией. Дженерики касаются параметрического полиморфизма. Ваш второй «шаблон» в основном включает в себя всю концепцию, поэтому я бы не назвал этот шаблон.

Итак, каковы параметрические шаблоны?

Как насчет модели кредитора. Не важно, какой тип ресурса предоставляется или заимствован, так что это может быть общий параметр.

Завод также может быть выражен с использованием дженериков. Тип создаваемых экземпляров - это параметр.

Функциональные объекты или объекты обратного вызова обычно имеют недействительные и T -повторяющие ароматы.

Это тот уровень абстракции, о котором вы просите?

Я продолжу редактировать этот ответ, когда придумаю больше.

Насколько API, идет, мое правило заключается в том, чтобы попытаться принять наиболее экспансивный тип возможно, это означает, по существу, как многие символы, как это возможно в аргументах метода, используя дисперсию, чтобы решить, если extends или super уместно, и возвращение наиболее конкретный тип возможен, что означает как можно меньше переменных типа или подстановочных знаков.

+0

Хороший ответ. Да, это то, чего я ожидал. Было бы полезно, если бы вы могли привести примеры или указать ссылки (например, шаблон Lender эквивалентен поставщику Guava , если это то, что вы имеете в виду). Не могли бы вы также объяснить преимущество эмпирического правила на примере? –

 Смежные вопросы

  • Нет связанных вопросов^_^