2017-04-04 1 views
2

Ist es in Kotlin möglich, eine anonyme Klasse zu erstellen, die eine bestimmte Schnittstelle implementiert und nur die Funktionen implementiert, die Sie benötigen? Zum Beispiel möchte ich eine Klasse erstellen AnimationListener Implementierung der 3 Methoden hat:Implementieren Sie nur eine Methode von Schnittstelle in anonymer Klasse

  • onAnimationStart
  • onAnimationEnd
  • onAnimationRepeat

Wenn ich den onAnimationEnd nur Rückruf verwenden mag, kann ich nur tun etwas wie das?

object : AnimationListener { 
    override fun onAnimationEnd() { 
     //my implementation 
    } 
} 

So wie ich das in Java getan habe, war durch Erstellen einer Klasse, die die Schnittstelle implementiert, nur anonyme Klasse dieser Klasse erstellen und die Methoden überschreiben, was ich brauche. Ich hoffte, dass Kotlin einen besseren, weniger wortreichen Ansatz dazu hat.

+0

Es ist eine Interface-Methode "implementieren" und nicht überschreiben! –

Antwort

6

Ich erwarte nicht, dass es etwas in Kotlin anders als Java in dieser Hinsicht gibt. Sie können jedoch Ihre eigenen Schnittstellen erstellen, die no-op Implementierung von Methoden haben den Standard Sie nicht brauchen:

interface AnimationEndListener : AnimationListener { 
    fun onAnimationStart() {} 
    fun onAnimationRepeat() {} 
} 

Dann tatsächliche konkrete Umsetzung wird AnimationEndListener erweitern und außer Kraft setzt nur das, was gebraucht wird.

+0

Danke, ich lasse das für jetzt offen, falls andere Leute eine andere Antwort oder Workaround geben würden. Aber für jetzt scheint dies der Weg zu sein – dumazy

+2

Es gibt ['AnimationListenerAdapter'] (https://developer.android.com/reference/android/animation/AnimatorListenerAdapter.html) was erlaubt zu tun, was OP verlangt. – azizbekian

+0

@azizbekian Danke dafür, das ist etwas, das ich benutzen kann, aber das war nur ein Beispiel. Ich war auf der Suche nach einer allgemeinen Antwort – dumazy

Verwandte Themen