Est-il possible de créer une extension de classes final
comme String? Comme dans swift , il est possible d'ajouter des méthodes supplémentaires dans un extension
de final
class
.
Pour un exemple - je voudrais créer une méthode dans l'extension String
qui me dira que String
a une longueur valide pour le mot de passe.
val password : String = mEdtPassword!!.getText().toString()
// how to define haveValidLength method in extension
val isValid : Boolean = password.haveValidLength()
Remarque - Cet exemple est juste pour comprendre la convivialité de extension
, pas un vrai scénario.
2 réponses
Oui, vous pouvez. La méthode d'extension de Kotin offre la possibilité d'étendre une classe avec de nouvelles fonctionnalités sans avoir pour hériter de la classe ou utiliser tout type de modèle de conception tel que Decorator.
Voici une méthode d'extension pour un String
:
// v--- the extension method receiver type
fun String.at(value: Int) = this[value]
Et le code de méthode d'extension généré en Java ci-dessous:
public static char at(String receiver, int value){
return receiver.charAt(value);
}
Ainsi, une méthode d'extension dans Kotlin utilise la délégation plutôt que l'héritage.
Ensuite, vous pouvez appeler une méthode d'extension comme sa fonction membre comme ci-dessous:
println("bar".at(1))//println 'a'
Vous pouvez également écrire une méthode d'extension pour la fonction d'extension existante, par exemple:
fun String.substring(value: Int): String = TODO()
// v--- throws exception rather than return "ar"
"bar".substring(1)
Mais vous ne pouvez pas écrire une méthode d'extension pour la fonction membre existante, par exemple:
operator fun String.get(value: Int): Char = TODO()
// v--- return 'a' rather than throws an Exception
val second = "bar"[1]
Vous pouvez le faire avec les fonctions d'extension dans Kotlin. Avec les extensions, vous pouvez ajouter des fonctionnalités supplémentaires à une classe à laquelle vous avez ou n'avez pas accès; par exemple une base de code héritée. Dans l'exemple donné dans la documentation Kotlin ici, swap
a été ajouté à MutableList<Int>
qui n'a pas swap
à l'origine. Un mot clé this
est utilisé et fait référence à l'objet sur lequel la fonctionnalité d'échange fonctionnera. Dans l'exemple ci-dessous, this
fait référence à testList
val testList = mutableListOf(1, 2, 3)
testList.swap(0, 2)
Questions connexes
De nouvelles questions
kotlin
Kotlin est un langage de programmation open source à typage statique pris en charge et développé par JetBrains. Kotlin combine la POO et les fonctionnalités fonctionnelles et se concentre sur l'interopérabilité, la sécurité, la clarté et le support de l'outillage. Il cible actuellement la JVM et JavaScript, et c'est un langage officiellement pris en charge sur Android.