2013-10-13 29 views
4

我在使用Java集合和Guava时非常广泛地使用泛型。我使用API​​时,理解得相当好:寻找Java泛型的模式和API设计

  1. 佩奇规则
  2. {合作,禁忌,在}方差
  3. 通配符
  4. 界仿制药

不过,我觉得很难使用泛型来创建API。 Java泛型是否有设计模式?或者任何对Java泛型的引用也会有所帮助。我读过:

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

我熟悉的只是两种模式,其中仿制药是有用的:

  1. 遏制概念:Java系列,Guava Optional<T>
  2. 类型参数:番石榴Predicate<T>Function<T>
+0

如果你已经阅读过Effective Java,那么就像Yoda说的那样:“你不需要更多的培训,你已经了解你,你需要。” – Vidya

回答

1

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

那么什么是参数化模式?

贷方模式如何。什么类型的资源是借出还是借出并不重要,因此可以是通用参数。

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

功能性或回调对象通常会出现空白并返回T返回的风味。

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

我会继续编辑这个答案,因为我想出了更多。我的经验法则是尝试接受最广泛的类型,这意味着尽可能多的方法参数中使用通配符,使用方差来确定extendssuper是否合适,并返回可能的最具体类型,意味着尽可能少的类型变量或通配符。

+0

很好的答案。是的,这正是我期待的。如果您可以提供示例或指向参考(例如,贷款人模式等同于番石榴的供应商,如果这就是您的意思),那将会很有帮助。你能否以一个例子解释经验法则的好处? –