web-dev-qa-db-fra.com

Comment créer une instance de classe anonyme de classe abstraite dans Kotlin?

Supposons que KeyAdapter est une classe abstraite avec plusieurs méthodes qui peuvent être remplacées.

En Java je peux faire:

KeyListener keyListener = new KeyAdapter() {
    @Override public void keyPressed(KeyEvent keyEvent) {
        // ...
    }
};

Comment faire de même à Kotlin?

87
Tvaroh

De la documentation officielle de la langue Kotlin et l'un des premiers hits sur Google:

window.addMouseListener(object : MouseAdapter() { 
    override fun mouseClicked(e : MouseEvent) { 
    // ... 
}

Appliqué à votre problème actuel:

val keyListener = object : KeyAdapter() { 
    override fun keyPressed(keyEvent : KeyEvent) { 
    // ... 
} 

Comme Peter Lamberg l'a souligné - si la classe anonyme est en fait une implémentation d'une interface fonctionnelle ( c'est-à-dire pas d'une classe abstraite ), SAM Conversions peut être utilisé pour simplifier encore plus cette déclaration:

val keyListener = KeyAdapter { keyEvent ->
    // ...
}

Veuillez également noter cette discussion sur les différentes utilisations des interfaces définies dans Java et Kotlin.

150
Michael Lang