kotlin - kotlin 接口、密封类和泛型类型使用(在接口函数中使用泛型类型的子类)
问题描述
我有这个密封类
sealed class S3FileUploaderRequest {
abstract val s3Configuration: S3Configuration
data class S3UploadRequest(
val uploadData: S3UploadData,
override val s3Configuration: S3Configuration
) : S3FileUploaderRequest()
data class S3DeleteRequest(
val path: String,
override val s3Configuration: S3Configuration
) : S3FileUploaderRequest()
data class S3MultiUploadRequest(
val multiUploadData: List<S3UploadData>,
override val s3Configuration: S3Configuration
) : S3FileUploaderRequest()
data class S3MultiDeleteRequest(
val paths: List<String>,
override val s3Configuration: S3Configuration
) : S3FileUploaderRequest()
}
而这个界面:
interface FileUploader<T, S> {
suspend fun multiUploadFile(request: T): S
suspend fun multiDeleteFile(request: T): List<S>
suspend fun uploadFile(request: T): S
suspend fun deleteFile(request: T): S
}
我想使用接口函数的数据类 S3FileUploaderRequest es 入口参数的子类,如下所示:
interface FileUploader<T, S> {
suspend fun multiUploadFile(request: out T): out S
suspend fun multiDeleteFile(request: out T): List<S>
suspend fun uploadFile(request: out T): out S
suspend fun deleteFile(request: out T): out S
}
有可能做到这一点吗?我觉得 kotlin 应该能够做到这一点,但没有找到合适的语法。
更新:
我想以这种方式实现接口:
@Singleton
class S3FileUploader() : FileUploader<S3FileUploaderRequest, S3FileUploaderResponse> {
override suspend fun uploadFile(request: S3UploadRequest): S3UploadResponse {
//DO STUFF
}
override suspend fun deleteFile(request: S3DeleteRequest): S3DeleteResponse {
//DO STUFF
}
override suspend fun multiUploadFile(request: S3MultiUploadRequest): S3MultiUploadResponse {
//DO STUFF
}
override suspend fun multiDeleteFile(request: S3MultiDeleteRequest): List<S3DeleteResponse> {
//DO STUFF
}
}
解决方案
推荐阅读
- c# - 无法在 C# 中向 GRID 面板添加不同的控件
- javascript - 我怎样才能在fullcalendar中显示超过标题
- java-9 - 是否可以使用 jvm 模式使用 prunsrv 启动 Java 运行时映像?
- ios - 当应用程序即将被卸载或更新时,Cordova 中是否有事件?
- java - 为什么直接绘制像素比在 BufferedImage 中绘制数据要慢?
- php - 有没有办法重复 li 类“x”次?
- android - 时间戳的整个小时?
- php - 在centos 7中更改nginx根目录
- excel - 有没有办法减慢 Web Scraper 的速度,以便它可以拾取代码?
- javascript - 插入 razor foreach 内的 JavaScript 对象?