我想在dart中使用C++之类的模板类来概括API_provider层。
但是以下代码无法用于T.myName是未定义的方法。
有没有办法使用T的成员函数?

例如

abstract class AC<T> {
  void sayHello() {
    print(T.myName); # undefined method
  }
}

class Info {
  static const name = "hoge";
  String myName() => name;
}

我想实现像下面的代码。
abstract class BaseProvider <T> {
  static const String baseUrl = 'localhost/';
  Future<List<T>> parseList (String Url){
    // parse Json to List
    // and T.fromMap() is necessary here
  }
}

class MyModelProvider extends BaseProvider<MyModel> {
  Future<List<MyModel>> searchByName(String name) => parseList(baseUrl + 'my_model?query=${name}');
}

最佳答案

您需要将T强制转换为具有myName方法的类。该代码将起作用:

abstract class AC<T> {
  void sayHello() {
    print((T as Info).myName);
  }
}

但是我建议写一个像ClassWithMyNameMethod这样的抽象类,它将由您所有的模型类实现:

abstract class ClassWithMyNameMethod {
  String name;
  String get myName;
}

class Info implements ClassWithMyNameMethod {
  @override
  String get myName => name;

  @override
  String name = 'hoge';
}

abstract class AC<T> {
  void sayHello() {
    assert(T is ClassWithMyNameMethod);
    print((T as ClassWithMyNameMethod).myName);
  }
}

关于flutter - 是否可以在dart中使用C++之类的模板参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59787682/

10-11 14:28