在匿名类中仅从接口实现一个方法

dum*_*azy 5 java kotlin

在Kotlin中是否可以创建一个实现某个接口的匿名类,并且只实现您需要的功能?例如,我想创建一个实现AnimationListener有3个方法的类:

  • onAnimationStart
  • onAnimationEnd
  • onAnimationRepeat

如果我只想使用onAnimationEnd回调,我可以这样做吗?

object : AnimationListener {
    override fun onAnimationEnd() {
        //my implementation
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Java中完成此操作的方法是创建一个实现接口的类,只需创建该类的匿名类并覆盖我需要的方法.我希望Kotlin有一个更好,更简洁的方法.

M. *_*rov 7

我不认为Kotlin在这方面与Java有什么不同.但是,您可以创建自己的接口,这些接口具有您不需要的方法的默认no-op实现:

interface AnimationEndListener : AnimationListener {
  fun onAnimationStart() {}
  fun onAnimationRepeat() {}
}
Run Code Online (Sandbox Code Playgroud)

然后实际的具体实现将扩展AnimationEndListener并仅覆盖所需的内容.

  • 有一个[`AnimationListenerAdapter`](https://developer.android.com/reference/android/animation/AnimatorListenerAdapter.html)可以执行OP要求的操作. (2认同)