从泛型约束中调用静态方法 - Dart

14
我正在尝试从我接收的泛型类型中调用静态方法。这是否可能?
此外,我应用了一个类型约束,以便仅操作其父类的对象。
这是我想要实现的简短示例:
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个回答

12
不,不可能。
Dart静态方法调用是在编译时解决的,因此不可能在仅在运行时才具有值的类型变量上调用它们。
如果这是可能的话,那将完全不安全。任何人都可以创建一个不具有静态func成员的扩展A的类C,并调用concret()。由于静态成员不会被继承,它将导致运行时错误,而在编译时无法检测到这种情况。这就是禁止这样做的主要原因。

因此,如果我们将Dart标准的工厂factory SomeClass.fromOtherClass(OtherClass otherClass)更改为OtherClass().toSomeClass(),则只有在其抽象形式中才能被调用。这比我想象的要困扰许多。 - BeniaminoBaggins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接