gpt4 book ai didi

dictionary - 有没有办法将字符串映射到 Dart 中的类型?

转载 作者:行者123 更新时间:2023-12-03 02:56:59 24 4
gpt4 key购买 nike

我想保留一个字符串的常量映射到定义的类,这些类都继承自一个类 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 采用 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具有相同的构造接口(interface),并且不仅仅是 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);

只要所有构造函数都接受相同的参数。

关于dictionary - 有没有办法将字符串映射到 Dart 中的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53995746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com