开闭原则和扩展函数

Open Close Principle and Extension Functions

我了解到开闭原则允许扩展到 classes 并限制修改。所以在Kotlin中,当我们使用扩展函数

  1. 我们是否延长了 class
  2. 或者我们正在修改 class
  3. kotlin中的扩展函数可以作为Open/Close原理的例子吗?

我假设扩展意味着应用继承和修改意味着添加或更改现有代码 class。

谢谢

扩展功能专为您想要向内置或第三方添加功能的情况而设计class。默认情况下您不能这样做,因为内置函数不可修改。

将 toUnsigned 方法添加到内置字节的示例实现 class:

fun Byte.toUnsigned(): Int {
    return if (this < 0) this + 256 else this.toInt()
}

由于 Byte 是内置的 class 您不能直接修改它。但是,您可以按照上面的代码定义一个扩展函数。然后可以通过以下方式调用扩展函数:

val x: Byte = -1
println(x.toUnsigned()) // Prints 255

请记住,这只是语法糖 - 您实际上并没有修改 class 或其实例。因此,您必须在任何要使用的地方导入扩展 function/property(因为它不随 class 的实例一起提供)。

来源:https://kotlinlang.org/docs/tutorials/kotlin-for-py/extension-functionsproperties.html

'Extension' 在开闭原则的上下文中通常并不意味着继承,它意味着以某种方式扩展 class 的新功能。正如你所说,'Modification' 确实指的是更改 class 的代码。

Kotlin 的扩展功能允许您将方法添加到 class 而无需编辑 class 的代码。这完全符合开放封闭原则——class 扩展了新功能,而 class 本身没有改变。