【问题标题】:Workaround for accessing type parameters in class from a static function in dart从 dart 中的静态函数访问类中的类型参数的解决方法
【发布时间】:2020-11-29 13:04:13
【问题描述】:

我正在尝试创建一个包装类,其中的方法需要是静态的,并且该类应该是通用的 所以,我写:

class Resource<T> {
     Resource({@required this.status, this.data, this.message});

     String message;
     Status status;
     T data;

     static Resource<T> success(T data) =>
        Resource(status: Status.SUCCESS, data: data);

     static Resource<T> error(String msg, T data) =>
        Resource(status: Status.ERROR, data: data, message: msg);

     static Resource<T> loading(T data) =>
        Resource(status: Status.LOADING, data: data)
}

所以,我可以这样使用它:

Resource<T> handleSuccess(data: T) {
    return Resource.success(data)
}

但是,我收到了一个错误static members can't reference type parameters of the class

是否有任何解决方法来实现此行为?

【问题讨论】:

    标签: generics dart static static-methods


    【解决方案1】:

    两个选项。要么使静态方法通用:

         static Resource<T> success<T>(T data) =>
            Resource(status: Status.SUCCESS, data: data);
    
         static Resource<T> error<T>(String msg, T data) =>
            Resource(status: Status.ERROR, data: data, message: msg);
    
         static Resource<T> loading<T>(T data) =>
            Resource(status: Status.LOADING, data: data);
    

    或将它们转入工厂构造函数:

         factory Resource.success(T data) =>
            Resource(status: Status.SUCCESS, data: data);
    
         factory Resource.error(String msg, T data) =>
            Resource(status: Status.ERROR, data: data, message: msg);
    
         factory Resource.loading(T data) =>
            Resource(status: Status.LOADING, data: data)
    

    两者都应该工作。主要区别在于如果要显式提供类型参数,则将其放在何处。要么:

      Resource.data<int>(42)  // Static method
    

      Resource<int>.data(42);  // factory.
    

    【讨论】:

    • 第二个解决方案缺少方法应该命名为构造函数也是因为我收到错误The default constructor is already defined
    • 很好,我的坏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2022-01-24
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2014-07-06
    相关资源
    最近更新 更多