Dart/Flutter - 调用未知具体类的构造函数(从 Type 获取类)

问题描述 投票:0回答:2

我想调用具体类的构造函数,但我只有一个实现接口的

Type
。是否可以从
Type
获取具体类并调用其构造函数,而实际上不必知道它?

我当前的解决方法是使用强制转换的开关,但这似乎不合理,因为每当另一个类实现该接口时我就必须维护该开关。

abstract class IFace {
  String foo();
}

class Bar implements IFace {
  String foo() => 'I am Bar';
}

T? getObject<T extends IFace>() {
  // what I'd like to do, but does not work:
  // return T();
  
  // what I have to do instead:
  switch (T) {
    case Bar:
      return Bar() as T;
    default:
      return null;
  }
}


void main() {
  Bar? bar = getObject<Bar>();
  
  print(bar?.foo()); // I am Bar
}
flutter class dart types interface
2个回答
0
投票

这并不是一件容易的事情,因为如果 T 没有公共构造函数,或者它有命名构造函数怎么办? ;)

我认为只有使用 dart:mirrors 包才有可能,该包在 Flutter 上不可用(由于 AOT 编译)。

作为替代方案,您可以尝试使用 reflectable 包,但这也不容易做到。


0
投票

也许你可以在界面中指定一个构造函数

© www.soinside.com 2019 - 2024. All rights reserved.