我可以在Dart中使用泛型吗?

时间:2019-05-22 09:04:57

标签: dart flutter

我想解析对Dart对象的http响应,所以我定义了一个抽象类

BaseBean:

abstract class BaseBean{

  BaseBean.fromJson(Map<String, dynamic> json);

  Map<String, dynamic> toJson();

}

我在函数中使用了它:

Future<ResultData<T>> netFetch<T extends BaseBean>(){
  ......
  return new ResultData(T.fromJson(), result, code);
}

但是T.fromJson()有一个错误:

没有为类'Type'定义方法'fromJson'

那么,我可以在Dart中使用泛型吗?有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

是的,当然可以,但是只有一种解决方法:

T unmarshal<T>(Map map, {Type type}) {
  if (type == null) {
    type = T;    
  }

  switch (type) {
    case Order:
      return Order.fromJson(map) as T;
    case OrderItem:
      return OrderItem.fromJson(map) as T;
    case Product:
      return Product.fromJson(map) as T;
    default:
      throw StateError('Unable to unmarshal value of type \'$type\'');
  }
}
var order = unmarshal<Order>(data);
//
var product = unmarshal(data, type: Product) as Product;
//
var type = <String, Type>{};
types['OrderItem'] = OrderItem;
// ...
var type = types['OrderItem'];
var orderItem = unmarshal(data, type: type);