Kotlin-从类泛型类型参数获取T::class.java

Kotlin-从类泛型类型参数获取T::class.java,kotlin,corda,Kotlin,Corda,我正试图围绕科尔达的金库建立一个通用存储库。它应该是这样的: class VaultRepository<out T : ContractState>(private val services: CordaRPCOps) { fun getUnconsumedStateByExternalId(externalId: String): T { return services.vaultQuery<T>(...).states.single().s

我正试图围绕科尔达的金库建立一个通用存储库。它应该是这样的:

class VaultRepository<out T : ContractState>(private val services: CordaRPCOps) {

    fun getUnconsumedStateByExternalId(externalId: String): T {
        return services.vaultQuery<T>(...).states.single().state.data
    }
}
class Vault存储库(专用val服务:CordaRPCOps){
fun GetUnumedStateByexternalId(externalId:String):T{
return services.vaultQuery(…).states.single().state.data
}
}
但我得到了这个错误:

无法将“T”用作具体化的类型参数

我可以使用另一个
vaultQuery
函数,该函数将
作为参数,但我需要能够首先从
VaultRepository
获取它


有没有办法从类泛型类型参数列表中获取T?

我的解决方案是向主构造函数添加一个
Class
参数和一个类似构造函数的函数,该函数从
具体化的T
中获取

class VaultRepository<out T : ContractState>(
    private val services: CordaRPCOps,
    private val clazz: Class<T>
) {
    fun getUnconsumedStateByExternalId(externalId: String): T {
        return services.vaultQuery(..., clazz).states.single().state.data
    }
}

fun VaultRepository<reified T : ContractState>(services: CordaRPCOps) =
    VaultRepository(services, T::class.java)
类存储库(
私人val服务:CordaRPCOps,
私人课堂
) {
fun GetUnumedStateByexternalId(externalId:String):T{
return services.vaultQuery(…,clazz).states.single().state.data
}
}
fun Vault存储库(服务:CordaRPCOps)=
Vault存储库(服务,T::class.java)

预测特定的评论:有些人认为
fun
s不应该看起来像构造器

出于好奇:为什么?你想做什么?在这种情况下你不能做物化。你能举例说明为什么需要它吗?@timcastelijseupdate@s1m0nw1请参见Updates,该类型参数仅与所描述的方法相关吗?您可以使用一个具体化的方法类型参数来代替它。这是一种提供所需行为的好方法,尽管我不同意funs的构造函数外观++@s1m0nw1我非常喜欢Scala的统一访问原则,这是Kotlin进一步扩展它的一个例子。@AlexeyRomanov我喜欢这样,尽管我确实将类似构造函数的函数移动到了一个
伴生对象
,并将其重命名为
createRepository
。我在这里也有类似的问题。你能帮忙吗。