Kotlin, visibility modifiers'un yanı sıra extension functions'un bir çift özelliklerini barındırır. Belgeleme, Extensions are resolved statically
. Fakat bu, sınıf üyelerinin uzatma fonksiyonları içindeki görünürlüğü için ne anlama geliyor? Korumalı üyeler genişletme işlevlerine erişemez mi?
class A { protected val a = "Foo" }
fun A.ext() { print(a) } //Raises: Cannot access 'a': it is 'protected' in 'A'
class B { val b = "Bar" }
fun B.ext() { print(b) } //Compiles successful
kod derlemek olmaz. Sınıfı genişletirken korunan üyelere ulaşılamıyor gibi görünüyor.
Yani uzatma fonksiyonu Java böyle bir şey olması için sözdizimsel şeker anlamına statik çözüldü yapar: korumalı üyeler erişilebilir değildir açıklıyor
public static void ext(A receiver){ System.out.print(receiver.a); }
. Diğer yandan, uzatma fonksiyonlarında this
'u kullanmak (ve hatta atmak) mümkündür.
Uzantı işlevlerinin tam kapsamı nedir?