我试图在泛型上使用构造函数,但是由于泛型(此处用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/