我正在与Kotlin一起探索使用BDB JE(Berkeley DB Java Edition)。 BDB的知识不需要回答这个问题。在Kotlin中,如何使用本地java参数实例化泛型类?
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>
我得到以下错误:
Type inference failed: Expected type mismatch: Inferred type is
PrimaryIndex<TModel!, TKey!>!
butPrimaryIndex<TModel, TKey>
was expected.
我问题:我可以通过索引ModelStore
吗?我如何说服类型系统这是犹太教?
什么是'getIndex'的返回类型? – hotkey
@hotkey:PrimaryIndex! –
这也重现了错误:'val用户:PrimaryIndex = store.getPrimaryIndex(Int :: class.java,“Int”,User :: class.java,“User”)' –