主要观点:
- 介绍了 Transformer 模式,用于 Java 及可能其他具有特定类型参数的面向对象语言,可帮助子类型层次结构中的对象转换为任何类型的对象。
- 讨论了在 Java 中实现 Transformer 模式的相关提案,包括在
String和CharSequence上的transform方法,以及遇到的问题和解决方案。 - 提出通过中间辅助类型
Transformer和Transformable接口来解决函数参数协变和逆变的问题,给出了示例实现和在CharSequence与String中的应用。 - 讨论了性能方面,通过 JMH 基准测试证明额外的
Transformer对象不会影响性能。 - 总结认为
Transformable可能过于“奢侈”,但对Transformer和Transformable的总体想法很有吸引力。
关键信息:
String.transform方法通过给定函数对自身进行操作,可用于链式调用工具方法。- 在
CharSequence上定义transform方法时存在问题,Java 不支持逆变参数类型。 - 通过中间接口
Transformer和Transformable,在两个单独声明中实现协变指定逆变边界。 - 在
CharSequence和String中应用Transformer模式的方式,包括实现接口和修改返回类型。 - 性能测试表明额外的
Transformer对象不会在堆上分配,不影响性能。
重要细节:
Transformer接口定义为@FunctionalInterface,包含一个带有泛型方法by的函数式接口。Transformable接口用于提醒子类实现者和用户关于transformed方法的相关操作。- 在
CharSequence和String中的实现细节,如CharSequence扩展Transformable,String实现transformed方法等。 - 性能测试中创建了
String的简单包装类进行基准测试,比较了不同调用方式的性能。 - 与
Filterer模式进行了比较,指出两者的相似性和差异。 - 提到标记为
@FunctionalInterface的接口在使用 lambda 表达式时有限制,但方法引用不受影响。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。