我想在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/