gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:49:05 24 4
gpt4 key购买 nike

我正在尝试围绕Corda的金库建立一个通用存储库。它看起来应该像这样:

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

fun getUnconsumedStateByExternalId(externalId: String): T {
return services.vaultQuery<T>(...).states.single().state.data
}
}

但是我得到这个错误:

Cannot use 'T' as reified type parameter



我可以使用另一个 vaultQuery函数,该函数将 Class<T>代替作为参数,但是我需要首先能够从 VaultRepository<T>获取它。

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

最佳答案

我的首选解决方案是在主要构造函数中添加一个Class<T>参数,以及一个类似构造函数的函数,该函数从Class获取reified 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)

预期会有一个特定的评论:有些人认为 fun看起来不应该像构造函数。 The Kotlin team doesn't agree.

关于Kotlin-从类通用类型参数获取T::class.java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48811747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com