开闭原理和扩展功能

时间:2019-03-13 18:37:31

标签: android kotlin solid-principles extension-function

我了解到“打开关闭原则”允许扩展类并限制修改。所以在Kotlin中,当我们使用扩展功能时

  1. 我们要扩展课程吗
  2. 还是我们要修改类
  3. kotlin中的扩展功能可以作为“打开/关闭原理”的示例吗?

我假设扩展方式是指继承,修改方式是指添加或更改现有类的代码。

谢谢

2 个答案:

答案 0 :(得分:3)

扩展功能是为要向内置或第三方类添加功能的情况而设计的。默认情况下,您无法执行此操作,因为内置函数不可修改。

将toUnsigned方法添加到内置Byte类的示例实现:

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

由于Byte是内置类,因此无法直接修改它。但是,您可以按照上述代码定义扩展功能。然后,您可以通过以下方式调用扩展功能:

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

请记住,这只是语法糖-您实际上并没有在修改类或其实例。因此,您必须在要使用扩展名的位置导入扩展功能/属性(因为该扩展功能不属于类的实例)。

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

答案 1 :(得分:1)

在“开放式封闭原则”的上下文中,“扩展”通常并不意味着继承,它意味着以某种方式使用新功能扩展了类。正如您所说,“修改”确实是指更改类的代码。

Kotlin的扩展功能允许您在不编辑类代码的情况下向类添加方法。这完全符合开放式封闭原则-在不更改类本身的情况下,使用新功能扩展了该类。