0

我有几个对象reinterpreter内存:与物化方法的通用接口

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

我该如何解决?

回答

2

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

这意味着,只需要功能签名fun <reified T> data(): reinterpreter<T>,您必须返回reinterpreter<T>。相反,您将返回一个vec1bData,它的类型为reinterpreter<Vec1b>而不是reinterpreter<T>

+0

任何想法我该如何解决/有什么改变? – elect

+0

施法将在这里帮助,在Kotlin它用'as'关键字完成。 – user3151902