Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何从对象实例的类型实例化泛型?_Flutter_Dart - Fatal编程技术网

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>();
  }
}