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:
Şimdiclass 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.
Bu durumda, yazarın kaçınmaya çalıştığı tüm yöntemleri manuel olarak devretmeniz gerekir. – Michael
@Michael evet bu doğru, ancak sadece manuel bir temsilci sadece bir kez 'Tutucu' için yapmak zorundayım, bundan sonra hiçbir ek tablo – voddan
ile kullanabilirsiniz Bunun için herhangi bir ek sınıfa ihtiyacınız yok. Sadece 'Derived' den her şeyi delege edin. – Michael