[英]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.