在功能参数中添加数据类

问题描述 投票:0回答:1

我有以下三种方法:

func1() async {
 ...
 var list = (response['contents'] as List).map((i) => Quotation.fromJson(i)).toList();
 ...
} // has 20 lines

func2() async {
 ...
 var list = (response['contents'] as List).map((i) => Delivery.fromJson(i)).toList();
 ...
} // has 20 lines

func3() async {
 ...
 var list = (response['contents'] as List).map((i) => Discovery.fromJson(i)).toList();
 ...
} // has 20 lines

现在我想添加一个参数来概括SomeClass.fromJson(i)

所以代码会像这样

generalFunc( someType SomeClass ) async {
 ...
 var list = (response['contents'] as List).map((i) => SomeClass.fromJson(i)).toList();
 ...
}

... call generalFunc(Quotation) // reduce 19 lines
... call generalFunc(Delivery) // reduce 19 lines
... call generalFunc(Discovery) //reduce 19 lines

我如何做到这一点?谢谢..

flutter dart
1个回答
0
投票

当声明参数someType SomeClass时,您期望的对象是SomeClass。如果这是您想要的,则可以声明dynamic类型的参数。

请参见下面的代码:

generalFunc( generic SomeClassObject ) async {
 ...
 var list = (response['contents'] as List).map((i) => SomeClassObject.fromJson(i)).toList();
 ...
}

... call generalFunc(quotationObject) // reduce 19 lines
... call generalFunc(deliveryObject) // reduce 19 lines
... call generalFunc(discoveryObject) //reduce 19 lines

但是,如果您想通过课程,那是不可能的。但是您可以通过将参数作为类的选择器来解决。

请参见下面的代码:

enum SomeClass {
  Quotation,
  Delivery,
  Discovery
}

generalFunc({ SomeClass someClass }) async {
  ...
  var list;
  if(someClass == SomeClass.Quotation){
    list = (response['contents'] as List).map((i) => Quotation.fromJson(i)).toList();
  }
  else if(someClass == SomeClass.Discovery) {
    list = (response['contents'] as List).map((i) => Discovery.fromJson(i)).toList();
  }
  else if(someClass == SomeClass.Delivery) {
    list = (response['contents'] as List).map((i) => Delivery.fromJson(i)).toList();
  }
  ...
}

... call generalFunc(someClass: SomeClass.Delivery);
... call generalFunc(someClass: SomeClass.Discovery);
... call generalFunc(someClass: SomeClass.Qoutation);
© www.soinside.com 2019 - 2024. All rights reserved.