我想在函数中返回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")
}
}
我在网上看到了一些类似的问题,但是我找不到合适的解决方案。
答案 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)
您不能只返回T
。 T
在这里输入,就像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
}
}