簡體   English   中英

Dart/Flutter - 調用未知混凝土 class 的構造函數(從 Type 獲取 class)

[英]Dart/Flutter - Call constructor of unknown concrete class (get class from Type)

我想調用一個具體的 class 的構造函數,但我只有一個實現接口的Type 是否可以從該Type中獲取具體的 class 並調用其構造函數而無需實際知道它?

我當前的解決方法是使用強制轉換的開關,但這似乎不合理,因為每當另一個 class 實現該接口時,我都必須維護該開關。

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 package 才有可能,這在 Flutter 上不可用(由於 AOT 編譯)。

作為替代方案,您可以嘗試使用可反射的 package,但這也不是一件容易的事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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