具有具体化方法的通用接口
generic interfaces with reified methods
我有几个对象要重新解释记忆:
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
}
我得到:
required reinterpeter<T>
, but found vec1bData
我该如何解决?
类型 vec1bData
不是 reinterpeter<T>
的有效替代,因为 vec1bData
的 T
不是泛型,而是设置为 Vec1b
。
这意味着,仅采用函数签名 fun <reified T> data(): reinterpreter<T>
,您必须 return 一个 reinterpreter<T>
。相反,你 return 一个 vec1bData
,它的类型是 reinterpreter<Vec1b>
而不是 reinterpreter<T>
.
我有几个对象要重新解释记忆:
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
}
我得到:
required
reinterpeter<T>
, but foundvec1bData
我该如何解决?
类型 vec1bData
不是 reinterpeter<T>
的有效替代,因为 vec1bData
的 T
不是泛型,而是设置为 Vec1b
。
这意味着,仅采用函数签名 fun <reified T> data(): reinterpreter<T>
,您必须 return 一个 reinterpreter<T>
。相反,你 return 一个 vec1bData
,它的类型是 reinterpreter<Vec1b>
而不是 reinterpreter<T>
.