Учитывая интерфейс:
interface Countable
{
val count: Int
}
И реализация / фабрика:
fun countable(counter: () -> Int): Countable = object : Countable
{
override val count: Int
get() = counter()
}
Я могу реализовать это с помощью функции делегирования класса by
:
class CountableThing : Countable by countable({ 123 })
Так что этот фрагмент предсказуемо выводит 123
:
fun main()
{
val countableThing = CountableThing()
println(countableThing.count)
}
Мой вопрос, в контексте класса делегата, есть ли способ получить экземпляр делегирующего получателя?
Другими словами, может ли моя реализация делегата Countable
(анонимный объект, определенный в fun countable
) увидеть / получить доступ к экземпляру приемника класса CountableThing
?
Я пробовал это:
fun <T> countable(receiver: T, counter: () -> Int): Countable = object : Countable
{
// ...
}
class CountableThing : Countable by countable<CountableThing>(this, { 123 })
Но это недействительно, потому что ожидаемо:
class CountableThing : Countable by countable<CountableThing>(this, { 123 })
/^^^^
'this' is not defined in this context