在 Kotlin 中,为什么抽象 class 不能像接口一样使用 "by" 关键字委托
In Kotlin, Why Abstract class cannot be delegated using "by" keyword just like interface
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”关键字委托 Abstract class。
注意:
说 we need to call constructor of Abstract class while extending it
,这不是问题的令人满意的技术答案。
这是不可能的,因为委派仅限于接口。
比方说,其中一个主要原因是违反了合同——如果 class 被委托,那么使用“默认”方法,如 toString
、hashCode
、equals
- 他们应该授权还是不授权?
解释了为什么会这样,以及取消此限制会产生什么后果。
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”关键字委托 Abstract class。
注意:
说 we need to call constructor of Abstract class while extending it
,这不是问题的令人满意的技术答案。
这是不可能的,因为委派仅限于接口。
比方说,其中一个主要原因是违反了合同——如果 class 被委托,那么使用“默认”方法,如 toString
、hashCode
、equals
- 他们应该授权还是不授权?