微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在dart中创建具有通用返回类型的方法

如何解决如何在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的函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。