interfaces genéricas con methods reificados

Tengo varios objects para reinterpretar la memory:

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

pero cuando escribo

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

Yo obtengo:

reinterpeter<T> requerido, pero se encontró vec1bData

¿Cómo puedo resolver?

El tipo vec1bData no es un sustituto válido para reinterpeter<T> , porque el T de vec1bData no es genérico, sino que se establece en Vec1b .

Eso significa que, tomando solo la function de firma de la fun <reified T> data(): reinterpreter<T> , debe devolver un reinterpreter<T> . En su lugar, devuelve un vec1bData , que es de tipo reinterpreter<Vec1b> lugar de reinterpreter<T> .