【发布时间】:2020-06-18 21:20:56
【问题描述】:
我有以下类,它基本上从 AWS 获取 JSON 字符串,然后将其转换为数据类的实例...
class SecretsManager(region: String) {
private val gson = Gson()
private val smClient = AWSSecretsManagerClientBuilder.standard().withRegion(region).build()
fun <T> getSecret(id: String): T {
val req = GetSecretValueRequest().withSecretId(id)
val json = smClient.getSecretValue(req).getSecretString()
return gson.fromJson(json, T::class.java)
}
}
要这样使用...
val myInstance = SecretsManager("eu-west-2").getSecret<MyDataClass>("myId")
目前,我收到一个错误 - 不能使用 'T' 作为具体类型参数。我可以通过将函数标记为 inline 并将 T 标记为 reified 来解决这个问题,但是我无法从函数内部访问私有属性。
在 Kotlin 中执行此操作的最佳方法是什么?
【问题讨论】:
-
您无法访问类型参数的类,因为它们已被删除。如果您不想使 T 具体化,请接受
Class<T>作为参数 -
将
Class参数添加到当前函数fun <T> getSecret(id: String, clazz: Class<T>): T并创建重载函数inline fun <reified T> getSecret(id: String): T = getSecret(id: String, T::class.java)
标签: kotlin