📜  在 Kotlin 中实现具有多个重写方法的复杂接口

📅  最后修改于: 2022-05-13 01:54:20.544000             🧑  作者: Mango

在 Kotlin 中实现具有多个重写方法的复杂接口

Kotlin 是 JetBrains 开发的一种静态类型的通用编程语言,构建了 IntelliJ IDEA、PhpStorm、Appcode 等世界一流的 IDE。它由 JetBrains 于 2011 年首次推出,是一种新的 JVM 语言。 Kotlin 是一种面向对象的语言,是一种比Java“更好的语言”,但仍可与Java代码完全互操作。在本文中,我们将讨论如何在 Kotlin 中实现具有多个重写方法的复杂接口,但在此之前,您应该了解一些更好的理解。

坚实的原则

SOLID 是一个助记首字母缩写词,用于定义五个基本的面向对象设计原则:

  • 单一职责原则
  • 开闭原则
  • 里氏替换原则
  • 接口隔离原则
  • 依赖倒置原则

接口隔离原则(ISP)指出,如果一个接口变得太长,最好将它分成更小的部分(接口),这样客户端就不需要实现他们不感兴趣的部分。在本文中,我们将了解什么以及为什么这很重要。

例子

让我们看一个 ISP 可以帮助我们的例子:

这是一个“胖”界面的简单示例:

Kotlin
button.setOnClickListener(object : View.OnClickListener {
  fun onClick (View v) {
    // TODO: do some stuff. . .
  }
  fun onLongClick (View v) {
    // we don't need it
  }
  fun onTouch (View v, MotionEvent event) {
    // we don't need it
  }
});


Kotlin
interface OnClickListener {
  fun onClick ( v:View )
}
public interface OnLongClickListener {
  fun onLongClick ( v: View)
}
interface OnTouchListener {
  fun onTouch ( v: View , event : MotionEvent)


Kotlin
fun main (args: Array) {
  Simple ().callMethod ()
}
  class Simple: A{
    fun callMethod () {
      bar ()
    }
  }
  interface A{
    fun bar () {
      println ("Printing from interface")
    }
  }


正如你所看到的,大接口的问题是我们被迫实现这些方法,即使我们在那里没有任何事情要做。一个简单的解决方案是将该接口分解为更小的接口,如以下代码:

科特林

interface OnClickListener {
  fun onClick ( v:View )
}
public interface OnLongClickListener {
  fun onLongClick ( v: View)
}
interface OnTouchListener {
  fun onTouch ( v: View , event : MotionEvent)

注意,现在我们已经把一个大的接口分成了几个小的,可以独立实现。 Kotlin 还有一个强大的功能,允许您在接口本身中编写方法的完整实现。让我们看一下下面的代码来理解它:

科特林

fun main (args: Array) {
  Simple ().callMethod ()
}
  class Simple: A{
    fun callMethod () {
      bar ()
    }
  }
  interface A{
    fun bar () {
      println ("Printing from interface")
    }
  }

如您所见,我们在接口中实现了整个方法,并且我们能够从实现该接口的类中调用它。这个特性也可以用来遵循 ISP 原则,因为我们可以在接口本身中放一个常用的方法;因此,我们不需要在每次实现该接口时都实现它。