如何在Kotlin中返回T?

时间:2019-03-08 08:55:13

标签: kotlin

我想在函数中返回T。

我有一个接口类IRepository.kt

interface IRepository
{
    fun <T>Save(model:T)
    fun <T>Delete(model:T)
    fun <T>Get(id:Long):T
}

我想在Repolmpl.kt中实现

class Repolmpl:IRepository
{

  override fun <T>Delete(model:T)
  {
      println("$model  : Save}")
  }

  override fun <T>Get(id:Long):T
  {
      return T //ERROR here I want to return T...
  }

  override fun <T> Save(model: T) 
  {
      println("$model : Delete")
  }
}

我在网上看到了一些类似的问题,但是我找不到合适的解决方案。

2 个答案:

答案 0 :(得分:2)

通用类型T基本上只是一个模板。您不能返回它,但必须先将其替换为实际类型。使接口本身通用,而不是其方法。实施时,请指定T

interface IRepository<T> {
    fun save(model: T)
    fun delete(model: T)
    fun get(id: Long): T
}

class Repolmpl: IRepository<String>
{
    override fun delete(model: String) {}
    override fun get(id: Long): String {}
    override fun save(model: String) {}
}

答案 1 :(得分:0)

您不能只返回TT在这里输入,就像return String

您必须返回 T的实例。所以,像这样:

class Repo {
    val data = mapOf<Long, Any>()

    // ...    

    fun <T> get(id: Long): T {
        return data[id] as T // Get data from somewhere and then cast it to expected type
    }
}