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