我正在探索使用BDB JE(Berkeley DB Java版)和Kotlin . 知道BDB不是回答这个问题的必要条件 .
BDB有一个如下所示的方法:
store.getPrimaryIndex(Int::class.java, "Int", Person::class.java, "Person")
我想做一般事情,所以我写了这个
inline fun <reified TModel : Any, reified TKey : Any> getIndex() =
return store.getPrimaryIndex(TKey::class.java, TKey::class.simpleName, TModel::class.java, Model::class.simpleName)
到现在为止还挺好 . 我现在想将这个索引对象传递给一个类,如下所示:
class ModelStore<TModel, TKey>(index : PrimaryIndex<TKey, TModel>) {
private val index = index
fun get(key : TKey): TModel = index.get(key)
fun put(model : TModel) = index.put(model)
}
但是如果我尝试将输出从 getIndex<User, Int>()
传递给 ModelStore<User, Int>
,我会收到以下错误:
类型推断失败:预期的类型不匹配:推断类型是PrimaryIndex <TModel!,TKey!>!但是预期PrimaryIndex <TModel,TKey> .
我的问题:我可以将索引传递给 ModelStore
吗?我如何说服类型系统这是犹太人?
1 回答
最简单的解决方法是转换类型:
我也希望它能在不指定类型的情况下工作: