【发布时间】:2018-07-26 11:25:18
【问题描述】:
我正在尝试围绕 Corda 的保管库构建一个通用存储库。它应该看起来像这样:
class VaultRepository<out T : ContractState>(private val services: CordaRPCOps) {
fun getUnconsumedStateByExternalId(externalId: String): T {
return services.vaultQuery<T>(...).states.single().state.data
}
}
但我收到此错误:
不能使用 'T' 作为具体类型参数
我可以使用另一个vaultQuery 函数,它以Class<T> 作为参数,但我需要先从VaultRepository<T> 获取它。
有没有办法从类泛型类型参数列表中获取 T?
【问题讨论】:
-
该类型参数是否仅与所描述的方法相关?您可以将 T 设置为具体的方法类型参数
-
@s1m0nw1 不,T 在很多方法中都是相关的。我可以让所有方法都采用 T(不是双关语)而不是班级,但我觉得当 T 在整个班级中都相同时,它会适得其反。 - 我猜这要么是困难的要么是不可能的,因为 JVM 的编译时类型擦除? (我来自 C#,CLR 是完全类型感知的,即使涉及 GTP,所以这将是微不足道的)
-
我在这里Modularising to create a function with variable Types in Kotlin也有类似的问题。你能帮忙吗?