2016-06-14 80 views
10

In Java, un'istanza di un oggetto di interfaccia è facile come new Interface() ... e sostituiscono tutte le funzioni necessarie, come di seguito, su AnimationListenercome creare un'istanza di una classe anonima che implementa un'interfaccia in Kotlin

private void doingSomething(Context context) { 
    Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.fade_in); 
    animation.setAnimationListener(new Animation.AnimationListener() { 
     // All the other override functions 
    }); 
} 

Tuttavia, in Kotlin quando digitiamo

private fun doingSomething(context: Context) { 
    val animation = AnimationUtils.loadAnimation(context, android.R.anim.fade_in) 
    animation.setAnimationListener(Animation.AnimationListener(){ 
     // All the other override functions 
    }) 
} 

Errore in caso di mancata consultazione References AnimationListener.

+1

Eventuali duplicati di [Come creare un'istanza di un'interfaccia anonimo Kotlin?] (Http://stackoverflow.com/questions/37672023/how-to-create-an-instance-of-anonymous-interface -in-kotlin) – miensol

risposta

19

Come spiegato in the documentation:

animation.setAnimationListener(object : Animation.AnimationListener { 
    // All the other override functions 
}) 
+0

Grazie! Grande. Quando cerco in https://kotlinlang.org/docs/reference/interfaces.html, non ha nemmeno toccato nulla su questo. La documentazione è abbastanza oscura. Cerca su internet anche non riesci a trovarlo. L'unico posto per trovarlo è scrivere manualmente un codice Java e convertirlo ... Speriamo che la mia domanda StackOverflow aiuti gli altri a cercarlo rapidamente per trovarlo. Grazie! – Elye

+0

Ho suggerito di migliorare la documentazione nel gioco Kotlin. Sono d'accordo sul fatto che le informazioni non siano così facili da trovare nel doc. –

+0

Sembra fantastico! – Elye

4

A quanto pare l'ultimo modo (usando Kotlin 1.0.5) di farlo è ora, senza la parentesi, dato non c'è alcun costruttore vuoto per l'interfaccia.

animation.setAnimationListener(object : Animation.AnimationListener { 
    // All the other override functions 
})