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)
    }
}