簡體   English   中英

有沒有辦法將字符串映射到Dart中的類型?

[英]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語句和代碼重復,因為BCD具有相同的構造接口,並且不止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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM