В 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 можно делегировать только интерфейсы) объясняет, почему это так и каковы будут последствия отказа от этого ограничения.