Flutter 如何从对象实例的类型实例化泛型?
以下是我的代码:Flutter 如何从对象实例的类型实例化泛型?,flutter,dart,Flutter,Dart,以下是我的代码: class Foo {} class MyClass extends Foo {} class HisClass extends Foo {} class YourClass extends Foo {} var x = [ MyClass(), HisClass(), YourClass() ]; class Something<T extends Foo> {} 我怎样才能让编译器满意我所做的是安全的呢?可能是这样的: void main()
class Foo {}
class MyClass extends Foo {}
class HisClass extends Foo {}
class YourClass extends Foo {}
var x = [
MyClass(),
HisClass(),
YourClass()
];
class Something<T extends Foo> {}
我怎样才能让编译器满意我所做的是安全的呢?可能是这样的:
void main() async {
var x = [MyClass(), HisClass(), YourClass()];
var list = x.map(Something
.builder); // Instance of 'Something<MyClass>', Instance of 'Something<HisClass>', Instance of 'Something<YourClass>'
print(list);
}
class Foo {}
class MyClass extends Foo {}
class HisClass extends Foo {}
class YourClass extends Foo {}
class Something<T extends Foo> {
Something();
static Something<Foo> builder(Foo item) {
switch (item.runtimeType) {
case (MyClass):
return Something<MyClass>();
case (HisClass):
return Something<HisClass>();
case (YourClass):
return Something<YourClass>();
}
return Something<Foo>();
}
}
void main()异步{
var x=[MyClass(),HisClass(),YourClass()];
var list=x.map(某物)
.builder);//某物实例,某物实例,某物实例
打印(列表);
}
类Foo{}
类MyClass扩展了Foo{}
类HisClass扩展了Foo{}
类YourClass扩展了Foo{}
分类{
某物();
静态对象生成器(Foo项){
开关(item.runtimeType){
案例(MyClass):
归还某物();
案例(他的班级):
归还某物();
案例(你的班级):
归还某物();
}
归还某物();
}
}
在这种情况下,我认为你的答案是务实的,但并不理想,因为它颠覆了问题的要点,因为它如何将某个东西
耦合到三个具体的类中。泛型类型参数在运行时被删除。因此,他们需要帮助编写代码,而不是执行代码。
void main() async {
var x = [MyClass(), HisClass(), YourClass()];
var list = x.map(Something
.builder); // Instance of 'Something<MyClass>', Instance of 'Something<HisClass>', Instance of 'Something<YourClass>'
print(list);
}
class Foo {}
class MyClass extends Foo {}
class HisClass extends Foo {}
class YourClass extends Foo {}
class Something<T extends Foo> {
Something();
static Something<Foo> builder(Foo item) {
switch (item.runtimeType) {
case (MyClass):
return Something<MyClass>();
case (HisClass):
return Something<HisClass>();
case (YourClass):
return Something<YourClass>();
}
return Something<Foo>();
}
}