首页 > 解决方案 > 如何在 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;
    }
  }

我是泛型新手,所以有人可以帮助我了解如何实现这一目标。

标签: genericsdarttypedef

解决方案


您需要编写两个不同的函数。

当调用泛型函数时T parseProperty<T>(String text) { ... },您需要知道在编译时要返回哪种类型。否则,您必须dynamic作为类型参数传递。

正如您还注意到的,简单地抽象返回类型会使函数难以实现。你必须把as T每一个返回表达式,因为没有办法发明一个未知类型的对象。

总而言之,如果您在编译时知道类型,则最好使用两个函数,或者如果您不知道则返回一个函数Object


推荐阅读