Generics Kotlin:返回泛型类型的函数。如果我不知道应该返回哪种具体类型呢?
我有以下类型:Generics Kotlin:返回泛型类型的函数。如果我不知道应该返回哪种具体类型呢?,generics,kotlin,Generics,Kotlin,我有以下类型: class Images<T : Image>( val images: List<T>, val totalCount: Int ) 以及具体实施: class NumberImageService : ImageService<NumberImage> { override fun getNewImages(offset: Int, limit: Int): Images<NumberImage> {
class Images<T : Image>(
val images: List<T>,
val totalCount: Int
)
以及具体实施:
class NumberImageService : ImageService<NumberImage> {
override fun getNewImages(offset: Int, limit: Int): Images<NumberImage> {
// return something
}
override fun getNextImage(): NumberImage {
// return something
}
}
这给了我一个错误,因为getNewImages的返回类型,即Images需要有一个参数:
One type argument expected for class Images<T : Image>
但是我现在需要使用哪个参数呢?试试这个:
fun <T : Image> getNewImages(input: ImageInput, offset: Int, limit: Int = Int.MAX_VALUE): Images<T> {
return when (input.imageType) {
ImageEnum.NUMBER ->
numberImageService.getNewImages(offset, limit)
ImageEnum.LETTER ->
letterImageService.getNewImages(offset, limit)
}
}
试试这个:
fun <T : Image> getNewImages(input: ImageInput, offset: Int, limit: Int = Int.MAX_VALUE): Images<T> {
return when (input.imageType) {
ImageEnum.NUMBER ->
numberImageService.getNewImages(offset, limit)
ImageEnum.LETTER ->
letterImageService.getNewImages(offset, limit)
}
}
您需要指定该参数,因为图像是通用的。因此,我建议采用以下两种方法之一: 1图像->返回类型是图像的子类型 2个图片->我不在乎有什么通用类型
我认为第一个解决方案是更好的我们有界的价值,所以我们知道更多的是什么 您需要指定该参数,因为图像是通用的。因此,我建议采用以下两种方法之一: 1图像->返回类型是图像的子类型 2个图片->我不在乎有什么通用类型
我认为第一个解决方案是更好的我们有界的价值,所以我们知道更多的是什么 正如我在评论中提到的,您可以使用图像作为返回类型。这基本上是说实现可以使用Image或Image的子类型。如果您熟悉Java,那么它类似于我在评论中提到的使用图像,您可以使用图像作为返回类型。这基本上是说实现可以使用Image或Image的子类型。如果您熟悉Java,那么它与使用Images类似您可以让ImageQueryResolveTargetNewImages返回图像。非常感谢。我将阅读它的工作原理,尽管^^此参考可能会有所帮助:。如果您熟悉Java,它与使用Images类似,您可以让ImageQueryResolveTargetNewImages返回图像。非常感谢。我将阅读它的工作原理,尽管^^此参考可能会有所帮助:。如果您熟悉Java,它与使用ImagesHi类似。谢谢你的回复。这是行不通的。这会导致图像和图像之间的类型不匹配。但是,将图像作为该函数的返回类型输入works.Hi。谢谢你的回复。这是行不通的。这会导致图像和图像之间的类型不匹配。但是,将图像作为该函数的返回类型进行输入是可行的。
fun <T : Image> getNewImages(input: ImageInput, offset: Int, limit: Int = Int.MAX_VALUE): Images<T> {
return when (input.imageType) {
ImageEnum.NUMBER ->
numberImageService.getNewImages(offset, limit)
ImageEnum.LETTER ->
letterImageService.getNewImages(offset, limit)
}
}
interface Images<out T : Image> {
// methods...
}
fun getNewImages(input: ImageInput, offset: Int, limit: Int = Int.MAX_VALUE): Images<Image> {
return when (input.imageType) {
ImageEnum.NUMBER ->
numberImageService.getNewImages(offset, limit)
ImageEnum.LETTER ->
letterImageService.getNewImages(offset, limit)
}
}