generics - 从dart中的静态函数访问类中的类型参数的解决方法

标签 generics dart static static-methods

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

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是否有解决此行为的解决方法?

最佳答案

两种选择。使静态方法通用:

     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.

关于generics - 从dart中的静态函数访问类中的类型参数的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63331499/

相关文章:

javascript - Typescript 通用 通用

Java:父类(super class)的接口(interface)泛型

c++ - C++14 中泛型 Lambda 中的静态自动变量

Java泛型类和非泛型类

go - 不属于接口(interface)类型的通用类型

dart - Polymer Dart @observable 不同的行为

flutter - 在 Flutter 中将焦点从一个文本字段更改为下一个文本字段

design-patterns - 如何定义抽象小部件?

javascript - 服务器在静态网站上渲染 React js

java - 如何使用guice注入(inject)将Class注入(inject)到具有静态方法的类中?