5

我在 Java 集合和 Guava 中广泛使用泛型。我在使用 API 时非常了解:

  1. PECS规则
  2. {co, contra, 不变}
  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>
4

1 回答 1

2

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

那么什么是参数模式呢?

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

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

函数或回调对象通常以 void 和T-returning 形式出现。

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

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

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

于 2013-10-13T04:42:01.587 回答