Firebase Storage参数化类StorageTask原始使用lint告警解决办法
解决StorageTask原始类型使用的lint告警问题
告警原因
StorageTask是带泛型约束的参数化类,声明时未指定泛型参数直接使用原始类型,就会触发「Raw use of parameterized class 'StorageTask'」lint提示。
正确声明方式
情况1:明确使用单一子类场景
如果你的变量只会存储某一种具体子类的实例,直接声明为对应子类类型即可,无需显式指定StorageTask的泛型:
- 仅存储上传任务:
private UploadTask storageTask; - 仅存储文件下载任务:
private FileDownloadTask storageTask; - 仅存储流下载任务:
private StreamDownloadTask storageTask;
如果需要显式声明为父类StorageTask类型,指定对应子类的返回快照泛型即可:
// 对应上传任务 private StorageTask<UploadTask.TaskSnapshot> storageTask; // 对应文件下载任务 private StorageTask<FileDownloadTask.TaskSnapshot> storageTask; // 对应流下载任务 private StorageTask<StreamDownloadTask.TaskSnapshot> storageTask;
情况2:兼容多子类场景
如果你的变量需要存储任意一种StorageTask子类的实例,使用泛型通配符指定上界即可:
private StorageTask<? extends StorageTask.ProvideError> storageTask;
注意事项
使用通配符声明时,调用返回泛型类型的方法得到的结果类型为? extends StorageTask.ProvideError,如果需要转换为具体的快照类型,请先做类型校验,避免出现类型转换异常。
内容的提问来源于stack exchange,提问作者Emmanuel Njorodongo
相关产品推荐
相关产品推荐

