0

J'ai plusieurs objets à reinterpreter mémoire:interfaces génériques avec des méthodes réifiées

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)  
} 

mais quand je tape

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

Je reçois:

nécessaire reinterpeter<T>, mais trouvé vec1bData

Comment puis-je résoudre?

Répondre

2

Le type vec1bData ne remplace pas valable pour reinterpeter<T>, parce que le T de vec1bData n'est pas générique, mais mis à Vec1b.

Cela signifie que, en prenant simplement la signature de fonction fun <reified T> data(): reinterpreter<T>, vous devez renvoyer un reinterpreter<T>. Au lieu de cela, vous renvoyez un vec1bData, qui est du type reinterpreter<Vec1b> au lieu de reinterpreter<T>.

+0

Une idée comment dois-je résoudre/quel changement? – elect

+0

La coulée aidera ici, à Kotlin c'est fait avec le mot clé 'as'. – user3151902