Junior — Middle
Lehet-e nevet használni egy kiterjesztett funkcióhoz ugyanúgy, mint egy belső osztály metódusához?
sobes.tech MI
Válasz az MI-től
В Android (Kotlin/Java) имя функции расширения может совпадать с именем метода внутреннего класса, так как функции расширения не являются членами класса, а статическими функциями с синтаксисом вызова как у метода.
Однако при вызове метода внутри класса приоритет будет у метода класса, а не у функции расширения. То есть, если у внутреннего класса есть метод с именем foo(), и вы объявите функцию расширения с таким же именем для этого класса, вызов foo() внутри класса вызовет именно метод, а не расширение.
Пример на Kotlin:
class Outer {
inner class Inner {
fun foo() = "method"
}
}
fun Outer.Inner.foo() = "extension"
fun main() {
val inner = Outer().Inner()
println(inner.foo()) // Выведет "method", а не "extension"
}
Таким образом, использовать одинаковые имена можно, но нужно понимать, что методы класса имеют приоритет над функциями расширения при вызове.