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

使用Java泛型寻找模式和API设计,java,generics,design-patterns,api-design,Java,Generics,Design Patterns,Api Design,我在Java集合和番石榴中广泛使用泛型。我在使用API时非常了解: PECS规则 {co,contra,in}variance 通配符 有界泛型 然而,我发现使用泛型很难实现API。有Java泛型的设计模式吗?或者对Java泛型的任何引用也会有所帮助。我读过: 有效Java 《Java泛型和集合》一书 我只熟悉泛型有用的两种模式: 包容的概念:Java集合、番石榴可选等 类型参数化:番石榴谓词,函数 大多数标准设计模式都是关于具有继承和组合的标准OO中固有的特殊多态性。泛型是关于参数多态性的。

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

  • PECS规则
  • {co,contra,in}variance
  • 通配符
  • 有界泛型
  • 然而,我发现使用泛型很难实现API。有Java泛型的设计模式吗?或者对Java泛型的任何引用也会有所帮助。我读过:

  • 有效Java
  • 《Java泛型和集合》一书
  • 我只熟悉泛型有用的两种模式:

  • 包容的概念:Java集合、番石榴
    可选
  • 类型参数化:番石榴
    谓词
    函数

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

    那么参数化模式是什么呢

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

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

    函数或回调对象通常是无效的,并且返回味道

    这就是你所要求的抽象层次吗

    我会继续编辑这个答案,因为我会想出更多的答案


    就API而言,我的经验法则是尝试并接受尽可能多的扩展类型,即在方法参数中使用尽可能多的通配符,使用方差来决定
    扩展
    超级
    是否合适,并返回尽可能多的特定类型,意思是尽可能少的类型变量或通配符。

    如果你读过有效的Java,那么正如尤达所说,“你不需要更多的培训。已经了解你了,你需要的。”回答很好。是的,这正是我所期待的。如果您能提供示例或参考资料(例如,贷方模式等同于Guava的供应商,如果这是您的意思的话),这将很有帮助。你能用一个例子解释一下经验法则的好处吗?