我想调用具体类的构造函数,但我只有一个实现接口的
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
}
这并不是一件容易的事情,因为如果 T 没有公共构造函数,或者它有命名构造函数怎么办? ;)
我认为只有使用 dart:mirrors 包才有可能,该包在 Flutter 上不可用(由于 AOT 编译)。
作为替代方案,您可以尝试使用 reflectable 包,但这也不容易做到。
也许你可以在界面中指定一个构造函数