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

Generics 具有具体化方法的通用接口,generics,interface,kotlin,inline,kotlin-reified-type-parameters,Generics,Interface,Kotlin,Inline,Kotlin Reified Type Parameters,我有几个对象要重新解释内存: 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

我有几个对象要重新解释内存:

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)    
}
接口重新解释程序{
运算符fun get(索引:Int):T
运算符乐趣集(索引:Int,值:T):任意
}
对象数据:重新解释程序{
重写运算符fun get(索引:Int)=Vec1b(数据,索引*Vec1b.size)
覆盖乐趣集(索引:Int,值:Vec1b)=value.to(数据,索引*Vec1b.size)
}
但是当我打字的时候

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

必需的
reinterpeter
,但找到的
vec1bData


如何解决?

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


这意味着,仅取函数签名
fun data():reinterpreter
,必须返回一个
reinterpreter
。相反,您返回一个
vec1bData
,它是
reinterpreter
类型,而不是
reinterpreter

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


这意味着,仅取函数签名
fun data():reinterpreter
,必须返回一个
reinterpreter
。相反,您返回一个
vec1bData
,类型为
reinterpreter
,而不是
reinterpreter

在Kotlin中,使用
as
关键字进行转换将有帮助。在Kotlin中,使用
as
关键字进行转换将有帮助。