Почему в котлин можно делегировать только интерфейсы?

Я видел несколько подобных вопросов, но никто не объяснил, почему делегирование ограничено интерфейсами?

В большинстве случаев на практике у нас есть что-то, что фактически не имеет никакого интерфейса, это класс, который ничего не реализует, кроме как предоставляет некоторую функциональность или реализует абстрактный класс.

Существует ли какое-либо фундаментальное ограничение, которое ограничивает это интерфейсом, или мы можем ожидать, что у kotlin будет неограниченная делегирование в будущем?

Это особенно полезно, если мы хотим расширить функциональность класса с использованием композиции, а не наследования.

class A {} class B(val a: A) : A by a {} 

Когда вы делегируете интерфейс, класс все еще реализует интерфейс. Поэтому для согласованности, если вы можете делегировать класс, он должен работать одинаково. Т.е.

 class A(x: Int) { fun foo() = x } class B(val a: A) : A by a {} 

необходимо скомпилировать

 class B(val a: A) : A { override fun foo() = a.foo() } 

кроме этого не работает:

  1. foo не является open и не может быть переопределен.

  2. вам нужно вызвать конструктор A class B(val a: A) : A(ax) тоже не поможет: x не является членом A

  3. Как насчет equals и hashCode : они делегированы? Любое решение приведет к странным последствиям.

Intereting Posts
проблема с параметром типа параметра Ошибка при попытке ввести ViewModelProvider в действие с помощью Dagger2 и Kotlin SparkJava не может работать вместе с некоторыми API-интерфейсами Google Youtube Неверное поведение Maybe <List <T >> в комнате? только один сопутствующий объект разрешен для каждого класса в Котлине Есть ли способ получить поведение FixedTreadPool с помощью сопрограмм? rxjava2 – простой пример выполнения задач в пуле потоков, подписывается на один поток Поток Akka, выше по потоку, не производя значения Spring Injecting util: карта в Котлине с типом безопасности Kotlin: получить ссылку на функцию экземпляра класса Могу ли я сделать конструктор по умолчанию для класса, созданного из файла Kotlin private? переменная вызова can not в студии android Вернуть пустой результат в запрос QueryRecyclerAdapter Разработка плагина Intellij IDEA. Действие «создать класс kotlin» Зависимость между Maven и Kotlin не приводит к классам Котлина