如何为Dart不可修改类型添加新接口并降低运行时开销?
在Dart中为不可修改类型添加自定义接口的方案分析
核心需求:为Dart中无法直接修改的类型(如int、DateTime)实现自定义的Affine<T>接口(要求实现difference和translate方法),同时尽可能降低运行时开销。以下是几种实现思路及分析:
- 适配器模式:编写包装类将原类型适配到
Affine<T>接口,但会为每个原类型实例创建额外的包装对象,显著增加运行时开销,不符合低开销的要求。 - 扩展方法:通过扩展方法可以给
int、DateTime添加difference和translate方法,但扩展方法本质是带语法糖的静态方法,无法让原类型真正实现Affine<T>接口,无法用于需要传递Affine<T>类型参数的场景。 - 扩展类型(extension type):尝试用
extension type实现Affine<T>接口,但原类型本身并未实现该接口,这种方式不可行——扩展类型仅能包装原类型,无法让原类型具备接口的契约能力。 - 重构接口为
AffineLine<T>:将原本针对实例的Affine<T>接口,改为针对类型的AffineLine<T>接口,为每种目标类型创建一个单例实例。这种方式能满足接口的功能要求,但使用起来不够直观优雅,且仅适用于特定场景,通用性不强。
内容的提问来源于stack exchange,提问作者Anakhand
相关产品推荐
相关产品推荐

