varsayalım ben bir arayüz olarak tanımlanan çok karmaşık şartname vardır:Kotlin heyeti
interface Spec { fun sayHello() }
Ve standart bir uygulamayla:Şimdi
class Impl(private val msg: String) : Spec { override fun sayHello() { println(msg) } }
Ben oluşturmak istediğinizi varsayalım Bu belirtimi ve delegeleri bir uygulamaya uygulayan sınıf, ancak tam temsilci nesnesi nesnenin kullanım ömrü boyunca değişebilir.
class Derived(var target: Spec) : Spec by target
Yukarıdaki örnekte sorun yapıcı çağrıldığında yapıcı argüman
target temsilci nesnesi olarak olmasıdır: Burada bir örnek verilmiştir. Delegeye daha sonra bir özellik erişimi yerine doğrudan sınıf tarafından erişilir. (Bu, Kotlin tarafından üretilen bytecode yoluyla onaylanmıştır.)
Yani, sınıf oluşturulduktan sonra
target özelliği değiştirilse bile, temsilci değişmez.
Herkes, her bir yöntemi yazmak zorunda kalmadan, bu yetkilendirmeyi Kotlin'de yapmak için bir yöntem sağlayabilir mi?
İdeal bir çözüm, nesnenin ömrü boyunca delege gerektiğinde delege olarak değerlendirilecek ve kullanılacak lambda veya başka bir ifade olarak genel olarak bir delegasyona izin verebilir.