如何为 Dart 类中的方法添加别名?例如,假设我们有一个类
Foo
和方法 bar
,我们希望 foo.qux(...)
的行为与 foo.bar(...)
完全相同(其中 foo
是 Foo
的一个实例),所以 qux
是 bar
的别名,您可以为相同的底层方法使用不同的名称。
当基类/接口声明“通用”方法时,我使用别名,子类用一个更具体的版本覆盖,该版本应该有自己的名字,因为它提供了更严格的合同(即使它仍然可以通过基名称访问)。例如:
BaseMeeting
声明抽象方法Duration estimateDuration()
,FutureMeeting
通过提供估计来实现它,PastMeeting
通过提供实际记录的持续时间来实现它。对于PastMeeting
的用户,有一个指向exactDuration()
(或反之亦然)的别名estimateDuration()
是有意义的。
可以使用最后一个字段:
class Foo {
void bar(Object x) => print(x);
late final qux = bar;
}
类型推断允许我们在保持类型安全的同时省略方法的签名。
我看到的唯一缺点是 IDE 的自动完成功能可能与常规方法的工作方式不完全相同。
一般来说,我建议你通常不要为方法创建别名。对同一事物使用多个名称通常会造成混淆。
如果它是针对您控制的类,并且您决定不喜欢旧的方法名称,只需重命名它即可。如果该类被其他人使用,那么重命名该方法并为旧名称额外提供一个已弃用的别名可能是合适的:
class Foo {
void methodWithNewName() {
// ...
}
@Deprecated('Use methodWithNewName instead')
late final methodWithOldName = methodWithNewName;
}
如果它是针对您无法控制的类(也许作者选择了一个特别糟糕或误导性的名称),那么您可以创建一个提供 getter 的扩展:
extension FooAliases on Foo {
void Function() get methodWithNewName => methodWithOldName;
}