在Kotlin中,如何使用本机java参数实例化一个泛型类?

我正在与Kotlin一起探索使用BDB JE(Berkeley DB Java版)。 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>ModelStore<User, Int>出现以下错误:

类型推断失败:期望类型不匹配:推断类型是PrimaryIndex<TModel!, TKey!>!PrimaryIndex<TModel, TKey>

我的问题:我可以将索引传递给ModelStore吗? 我如何说服类型系统这是犹太教?

最简单的解决方法是投射类型:

 ModelStore<User, Int>(getIndex<User, Int>() as PrimaryIndex<User, Int>) 

另外我希望它没有指定类型的工作:

 ModelStore(getIndex<User, Int>())