В Kotlin, почему абстрактный класс не может быть делегирован с использованием ключевого слова «by», как и интерфейс.

      interface IA {
    fun callMe()
}

abstract class AbstractA {
    abstract fun callMe()
}

// Allowed
class ImplementationA(a: IA): IA by a

//Why this is Not Allowed ?
class ImplementationA(a: AbstractA): AbstractA() by a

Я не смог найти какой-либо удовлетворительной причины, почему абстрактный класс нельзя делегировать с использованием ключевого слова «by».

Примечание: говоря, что , это не удовлетворительный технический ответ на проблему.

1 ответ

Это невозможно, потому что делегирование ограничено исключительно интерфейсами.

Одна из основных причин - это, скажем, нарушение контракта - если класс делегирован, то с помощью методов "по умолчанию", таких как toString, hashCode, equals - делегировать или нет?

Этот вопрос (почему в Kotlin можно делегировать только интерфейсы) объясняет, почему это так и каковы будут последствия отказа от этого ограничения.

Другие вопросы по тегам