Kotlin позволяет мне реализовать интерфейс, делегируя аргумент основного конструктора следующим образом:
class Foo(xs : ArrayList<Int>) : List<Int> by xs { }
Но это демонстрирует разработчику поддержки. Делегирование анонимного также выглядит нормально:
class Foo() : List<Int> by ArrayList<Int>() { }
Это скрывает детали реализации, но мы теряем доступ к функциям, не предоставленным интерфейсом, что в этом случае является изменчивостью.
Поэтому я хотел бы делегировать реализацию в свойство, которое не находится в основном конструкторе. То, что я хотел бы иметь, похоже на
class Foo() : List<Int> by xs {
val xs : List<Int> = ArrayList<Int>()
}
который не компилируется.
Можно ли явно определить свойство, определенное явным образом в классе класса, и все еще иметь возможность делегировать ему реализацию?