使用 Java 泛型寻找模式和 API 设计

Abh*_*k S 5 java generics design-patterns api-design

我在处理 Java 集合和 Guava 时非常广泛地使用泛型。我在使用 API 时非常理解它:

  1. PECS规则
  2. {co, contra, in}方差
  3. 通配符
  4. 有界泛型

但是,我发现很难使用泛型来提出 API。Java泛型有设计模式吗?或者任何对 Java 泛型的引用也会有所帮助。我读了:

  1. 有效的Java
  2. 《Java 泛型和集合》这本书
  3. http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

我只熟悉泛型有用的两种模式:

  1. 收容概念:Java集合、GuavaOptional<T>等。
  2. 类型参数化: Guava Predicate<T>,Function<T>

Jud*_*tal 3

大多数标准设计模式都是关于标准 OO 中固有的具有继承和组合的临时多态性。泛型是关于参数多态性的。你的第二个“模式”基本上包含了整个概念,所以我不会称其为模式。

那么参数化模式有哪些呢?

贷款人模式怎么样?借出或借入什么类型的资源并不重要,因此这可以是通用参数。

工厂也可以使用泛型来表示。正在生成的实例的类型是一个参数。

函数或回调对象通常有 void 和T-returning 风格。

这是您要求的抽象级别吗?

当我想出更多答案时,我会继续编辑这个答案。

就 API 而言,我的经验法则是尝试接受尽可能广泛的类型,这意味着方法参数中尽可能多的通配符,使用方差来决定 或 是否extends合适super,并返回可能的最具体类型,意味着尽可能少的类型变量或通配符。