具有具体化方法的通用接口

generic interfaces with reified methods

我有几个对象要重新解释记忆:

interface reinterpreter<T> {
    operator fun get(index: Int): T
    operator fun set(index: Int, value: T): Any
}

object vec1bData : reinterpreter<Vec1b> {    
    override operator fun get(index: Int) = Vec1b(data, index * Vec1b.size)    
    override fun set(index: Int, value: Vec1b) = value.to(data, index * Vec1b.size)    
}

但是当我输入时

inline fun <reified T> data():reinterpreter<T> = when (T::class.java) {    
        Vec1b::class.java -> vec1bData    
}

我得到:

required reinterpeter<T>, but found vec1bData

我该如何解决?

类型 vec1bData 不是 reinterpeter<T> 的有效替代,因为 vec1bDataT 不是泛型,而是设置为 Vec1b

这意味着,仅采用函数签名 fun <reified T> data(): reinterpreter<T>,您必须 return 一个 reinterpreter<T>。相反,你 return 一个 vec1bData,它的类型是 reinterpreter<Vec1b> 而不是 reinterpreter<T>.