通用接口与具体化方法

时间:2017-09-23 18:32:33

标签: 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 * 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    
}

我明白了:

  

必需reinterpeter<T>,但找到了vec1bData

我该如何解决?

1 个答案:

答案 0 :(得分:2)

vec1bData类型不是reinterpeter<T>的有效替代品,因为T的{​​{1}}不是通用的,而是设置为vec1bData

这意味着,仅使用函数签名Vec1b,您必须返回fun <reified T> data(): reinterpreter<T>。相反,您会返回reinterpreter<T>,其类型为vec1bData而不是reinterpreter<Vec1b>