我在 Kotlin 中看到了一些扩展函数的用法,我个人认为这没有意义,但似乎有一些指南“显然”支持它(解释问题)。
具体来说:在类之外定义扩展函数(但在同一个文件中):
data class AddressDTO(val state: State,
val zipCode: String,
val city: String,
val streetAddress: String
)
fun AddressDTO.asXyzFormat() = "${streetAddress}\n${city}\n${state.name} $zipCode"
广泛使用的地方asXyzFormat()
,并且不能被定义为私有/内部(但也适用于可能的情况)。
在我的常识中,如果您拥有代码AddressDTO
(班级。
- 边缘情况:如果您想避免以 - 开头的函数序列化
get
- 注释类以获得所需的行为(例如@JsonIgnore
在函数上)。这个恕我直言仍然不能证明扩展功能是合理的。
我对此的回应是,官方 Kotlin 编码约定支持具有这种方式的扩展功能的方法。具体来说:
自由使用扩展功能。每次您有一个主要作用于对象的函数时,请考虑将其作为扩展函数接受该对象作为接收器。 资源
和:
特别是,当为一个类定义与该类的所有客户端相关的扩展函数时,请将它们放在定义该类本身的同一文件中。在定义仅对特定客户端有意义的扩展函数时,请将它们放在该客户端的代码旁边。不要仅仅为了保存“Foo 的所有扩展名”而创建文件。 资源
我会感谢任何普遍接受的源/参考解释为什么将函数移动为类的成员和/或实用参数支持这种分离更有意义。