主要观点:
- 介绍了 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) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。