如何在Kotlin类中正确初始化StorageTask类型的属性?
解决StorageTask泛型类型参数错误问题
错误原因
StorageTask是泛型抽象类,必须指定合法的类型参数才能使用,且内部的ProvideError是私有接口,外部无法直接引用。你之前的写法要么用了错误的参数类型,要么用了泛型占位符而非具体类型,导致编译报错。
两种正确解决方案
方案1:使用具体子类(推荐)
StorageTask本身是抽象类,实际开发中我们会用到它的具体子类,比如上传任务用UploadTask、下载任务用FileDownloadTask、删除任务用DeleteTask等。这些子类已经预先指定了泛型参数,无需手动声明:
// 以上传任务为例 lateinit var mUploadsTask: UploadTask
这样既符合实际业务场景,又避免了手动处理泛型的麻烦。
方案2:指定正确的泛型参数(若需保留StorageTask类型)
如果一定要用StorageTask作为变量类型,需要传入对应任务的结果快照类型,比如上传任务对应的是UploadTask.TaskSnapshot:
lateinit var mUploadsTask: StorageTask<UploadTask.TaskSnapshot>
不同任务类型对应不同的快照类型:
- 上传任务:
UploadTask.TaskSnapshot - 文件下载任务:
FileDownloadTask.TaskSnapshot - 删除任务:
DeleteTask.TaskSnapshot
你之前的写法错误分析
StorageTask.ProvideError:这是StorageTask内部的私有接口,外部代码无法访问,因此报错。StorageTask()、StorageTask(ResultT):类型声明不能用括号,泛型参数必须用<>包裹,且StorageTask是抽象类不能直接实例化。StorageTask<ResultT>、StorageTask<ResultT : StorageTask.ProvideError!>:ResultT是泛型占位符,不是具体的类型,编译器无法识别。
内容的提问来源于stack exchange,提问作者Kalz
相关产品推荐
相关产品推荐

