本文由 简悦SimpRead 转码,原文地址 [medium.com](medium.com/@debuggingi… in-kotlin-b77409178047)
Dart支持Mixin来重用一个类的功能,而不需要从它继承。这缓解了......
Dart支持Mixin来重用一个类的功能,而不需要从它那里继承。这减轻了单一继承类的不便,让类的开发者根据上下文从不同的提供者(类)中挑选功能。
下面是一个Dart Mixin的用法,根据上下文(活动或服务)利用Firebase分析和广告调解。为了简洁起见,类和逻辑被简化了。一个服务没有使用广告,并且忽略了AdHelper。那么为什么不直接使用普通的组合呢?在继承和组合方面,Mixin方法是两个世界中最好的。一个instanceof(is)检查仍然可以用来验证类是否属于特定的类型。如果没有Mixin,共同的分析逻辑需要被添加到Activity和Service的继承层次中,导致代码重复,随着时间的推移成为维护的噩梦。
Dart混合器
Flutter利用这一点,使用AnimationController在widget上实现了动画,这需要一个TickerProvider来实现vsync。TickerProvider及其逻辑在TickerProviderStateMixin中被抽象出来,可以在widget状态中混合。
Kotlin支持接口委托来实现类似的东西。然而,Andrey Breslav(Kotlin的首席语言设计师)并不是很喜欢它。
在Kotlin中,同样可以通过一组接口合约来实现。Kotlin的接口委托根据定义需要基础接口和委托的具体实现。在Dart中,每个类也是一个具有隐含契约的接口。然而,功能可以通过继承的组合被重用,避免了代码的重复。
Kotlin接口委托