generics - 您可以使用抽象类构造泛型吗?

标签 generics dart constructor

我试图在泛型上使用构造函数,但是由于泛型(此处用T表示)可以是任何东西,因此我试图使T成为“RedClass”类型。如果我然后传递一个表示T的类,该类也扩展了“RedClass”,那么我将能够在T上使用RedClass构造函数,对吗?

abstract class RedClass {
  RedClass();

  RedClass.fromJson(Map<String, dynamic> json)
}

class BlueClass extends RedClass {
  BlueClass();
}

class FinalClass<T extends RedClass> {

// Inside FinalClass I can create a BlueClass from the generic T

final happyBlueClass = T.fromJson(someJson)

}

// When creating the FinalClass i pass a class that also extends RedClass
return FinalClass<BlueClass>()
但是尝试此操作时,通用T似乎无法访问任何.fromJson()构造函数。
有任何想法吗?

最佳答案

谢谢大家的建议。我真的很感激。
我现在的解决方案是使FinalClass的T尽可能通用,我需要使用小部件树中较早的提供程序将构造函数传递给FinalClass。

class FinalClassDataBuilder {
 final Type model;
 final Function builder;

 FinalClassDataBuilder({this.model, this.builder});
}

class FinalClassProvider extends StatelessWidget {
 final Widget child;
 final List<FinalClassDataBuilder> modelbuilderList;

 const FinalClassProvider({Key key, this.child, this.modelbuilderList})
  : super(key: key);

 @override
 Widget build(BuildContext context) {
  return Provider<List<FinalClassDataBuilder>>(
   create: (_) => [...modelbuilderList],
   child: child,
  );
 }
}

class FinalClass<T> {
 ...
 final List<FinalClassDataBuilder> builders =
    Provider.of<List<FinalClassDataBuilder>>(context);

final List<<FinalClassDataBuilder>> result = builders
    .where((datamodel) => datamodel.model.toString() == T.toString())
    .toList();
}

关于generics - 您可以使用抽象类构造泛型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64693435/

相关文章:

generics - 什么是参数多态函数?

dart - Flutter dropdownbutton添加装饰报错

foreach - Dart - 是否有可能改变 future.forEach。到 map ?

flutter - 为什么在构建 flutter web 时出现白屏

C++ 调用另一个类构造函数

c++ - 直接初始化中的转换运算符

java - 将 java.util.list 转换为 java.util.list 时出现编译器错误?

swift - 如何在当前类型 Swift 中使用泛型函数

java - 如何将通用子类型列表转换为特定子类型列表?

java - 构造函数链