[英]Is there a way to map strings to types in Dart?
我想保持字符串到已定义类的恒定映射,这些已定义类均从单个类A继承:
class A {}
class B extends A {}
class C extends A {}
class D extends A {}
const strToType = {
'str1': B,
'str2': C,
'str3': C,
'str4': D,
// etc.
};
因此,我假设此映射采用Map<String, Type>
,我什至尝试明确声明: <String, Type>{ /*...*/ }
尽管如此,我仍然无法像使用Python这样的其他语言一样,使用此映射来动态地决定要创建哪个对象:
A variable = new strToType[someString](args);
在这种情况下,Dart检查器显示错误,指出strToType is not a class
。
我尝试将strToType[someString]
括在括号中,然后会抱怨new (
部分。
实现我在Dart中所做的最好的方法是什么? 我想避免大量的switch语句和代码重复,因为B
, C
, D
具有相同的构造接口,并且不止3个类。
编辑:需要明确的是,在我的情况下,仅在运行时才知道该类的字符串标识符,我将收到字符串流,并基于此我要创建List<A>
,其中元素是专用的A
后代。
Dart Type
对象是代表类型的不透明标记。 它们不是类型本身。 您不能在需要类的地方使用Type
对象,因此不能执行new TypeVar()
或TypeVar.staticMember
。
如果要存储创建子类对象的方法,则需要存储执行此操作的函数。
const strToType = <String, A Function(argTypes)> {
'str1': (args) => new A(args),
'str2': (args) => new C(args),
'str3': (args) => new C(args),
'str4': (args) => new D(args),
// etc.
};
然后,您可以根据需要使用它:
A variable = strToType[someString](args);
只要所有构造函数都接受相同的参数即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.