J'essaie de comprendre en remplaçant une fonction de classe existante, avec une fonction d'extension de la même signature - prendra effet?Kotlin: Lorsque la fonction d'extension masque l'implémentation par défaut de la classe?
Voici mon exemple de code:
fun String.toUpperCase(): String = "ext. function impl."
fun main(args: Array<String>) {
println("Hello".toUpperCase()) // ext. function impl.
println(MyClass().toUpperCase()) // class impl.
}
class MyClass {
fun toUpperCase() : String {
return "class impl."
}
}
fun MyClass.toUpperCase() : String {
return "ext. function impl."
}
Alors:
- Quelles sont les règles? quand chacun sera appelé?
- Comment puis-je remplacer cette décision? c'est possible?
Ce comportement est en fait modifié à quelques endroits dans 'kotlin-stdlib' (par exemple [ici] (https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/src/generated/_Maps. kt # L133)), mais cela est fait avec 'kotlin.internal.HidesMembers', qui est, évidemment, un outil interne et n'est pas disponible pour le code tiers. Et c'est pour de bon. – hotkey