【发布时间】:2020-10-10 02:35:47
【问题描述】:
我有一个这样定义的枚举
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;
}
}
我是泛型新手,所以有人可以帮助我了解如何实现这一目标。
【问题讨论】:
-
您能否提供更多背景信息?您需要将
String转换为枚举似乎很奇怪。这似乎也不适合使用泛型。 -
哦,好吧,实际上我在 UI 中有一组单选按钮,我从后端获取一个字符串值,我需要根据返回的字符串显示一个要选择的单选按钮后端。
-
这对泛型没有意义。对于静态类型,调用者需要提前知道期望的返回类型。如果您希望返回多种类型,则必须返回
dynamic或Object并要求调用者执行运行时检查以判断返回的内容。 -
另外,这些选项听起来并不适合单选按钮,因为它们并非都是互斥的。
PropertyType和PossesionType值似乎应该是独立的,因此使用两组单选按钮(或一组单选按钮和一个复选框)更合适。