generics - 从 dart 中的静态函数访问类中的类型参数的解决方法
问题描述
我正在尝试创建一个包装类,其中的方法需要是静态的,并且该类应该是通用的,所以,我写道:
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.
推荐阅读
- azure - 使用带有 .NET Core 的服务主体列出所有 Azure Blob
- python - 如何使用 Python 沿着带有矩形边界框的斑点/轮廓的主轴裁剪图像
- javascript - React Native 中的注册问题(关于并发)
- javascript - 大家好, 如何使用一个路由文件中的变量到另一个路由文件?
- java - 如何为 BeforeAll 方法动态传递输入和预期文件名 六月 5
- python - 卡在 django 中设置密钥
- api - 如何在颤动中刷新聊天收件箱的消息流
- java - 按字段组合并 2 个对象列表
- c# - 如何将 uint 转换为 bool 数组?
- css - MDBootstrap 数据表未正确自动设置样式