generics - 如何在 dart 中创建具有通用返回类型的方法
问题描述
我有一个这样定义的枚举
enum PropertyType { apartment, villa, plot }
enum PossesionType { readyToMove, underConstruction }
我正在尝试创建一个通用方法,当给定字符串作为输入时,它会返回正确的枚举
class Property<T> {
T getGenericType(String text) {
switch (text) {
case 'Ready to move':
return PossesionType.readyToMove;
break;
case 'Apartment':
return PropertyType.apartment;
break;
....
....
....
default:
return PossesionType.readyToMove;
}
}
我知道这会抛出一个错误,因为它期望返回类型为 T,要在没有泛型的情况下使其工作,我需要编写两个具有不同返回类型的不同函数,但这两个函数基本上会做同样的事情。
PropertyType getSelectedProperty(String text) {
switch (text) {
case 'Apartment':
return PropertyType.apartment;
break;
case 'Villa':
return PropertyType.villa;
break;
case 'Plot':
return PropertyType.plot;
break;
default:
return PropertyType.apartment;
}
}
PossesionType getSelectedPossession(String text) {
switch (text) {
case 'Ready to move':
return PossesionType.readyToMove;
break;
case 'Under Construction':
return PossesionType.underConstruction;
break;
default:
return PossesionType.readyToMove;
}
}
我是泛型新手,所以有人可以帮助我了解如何实现这一目标。
解决方案
您需要编写两个不同的函数。
当调用泛型函数时T parseProperty<T>(String text) { ... }
,您需要知道在编译时要返回哪种类型。否则,您必须dynamic
作为类型参数传递。
正如您还注意到的,简单地抽象返回类型会使函数难以实现。你必须把as T
每一个返回表达式,因为没有办法发明一个未知类型的对象。
总而言之,如果您在编译时知道类型,则最好使用两个函数,或者如果您不知道则返回一个函数Object
。
推荐阅读
- apache-spark - 内部连接与之间的快速过滤
- for-loop - 在 nlm 函数中使用随机抽样
- r - R 内的 Interactive Brokers Web 套接字
- r - 在 R 中执行逻辑回归,我无法从数据集中解释几个缺失值
- reactjs - 测试反应应用程序时收到错误消息
- android - 如何保存对象类在共享首选项中具有对象类并检索该对象类
- azure-data-factory - 为什么在 Azure 数据工厂中设置变量会失败?- 字符串字符 '\"' 不是预期的
- database - 如何限制和排序左连接结果并将它们映射到 TypeORM 中的一个字段
- xamarin.forms - 从 Xamarin.Forms Shell 中的外部视觉层次结构返回 Shell Visual Hierarchy 时,全局 shell 路由卡在导航堆栈上
- c++ - 负整数和正整数之和导致意外输出 - c++