从通用约束Dart调用静态方法

时间:2019-05-14 17:18:34

标签: generics dart

我正在尝试从收到的通用类型调用静态方法。 那有可能吗?

此外,我应用了Type约束,以便仅从其父类操作对象。

这是我要实现的目标的简短示例:

class A {
  static func() {
    print("A");
  }
}

class B extends A {
  static func() {
    print("B");
  }
}

concret<T extends A>() {
  T.func(); // I expected a print('B')
}

main() {
    concret<B>();
}

1 个答案:

答案 0 :(得分:0)

不,这不可能。

Dart静态方法调用在编译时解决,因此无法在仅在运行时具有值的类型变量上调用它们。

如果可能的话,那将是完全不安全的。任何人都可以创建没有静态C成员的扩展A的类func并调用concret<C>();。由于静态成员不是继承的,因此必须给您一个运行时错误,并且您无法在编译时检测到该错误。这是不允许使用该标签的主要原因。