I have several objects to reinterpreter 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)
}
but when I type
inline fun <reified T> data():reinterpreter<T> = when (T::class.java) {
Vec1b::class.java -> vec1bData
}
I get:
required
reinterpeter<T>
, but foundvec1bData
How can I solve?
The type vec1bData
is not a valid substitute for reinterpeter<T>
, because the T
of vec1bData
is not generic, but set to Vec1b
.
That means, taking just the function signature fun <reified T> data(): reinterpreter<T>
, you must return a reinterpreter<T>
. Instead you return a vec1bData
, which is of type reinterpreter<Vec1b>
instead of reinterpreter<T>
.