/ ** 此“ T :: class.java”报告错误:无法使用“ T”作为化类型参数。请改用课程! 因此,我该如何解决它?我该怎么做才能实现这种方式? ** / 查看下一个Kotlin代码
data class PostHttpResultBean<T>(private var errno:Int,private var error:String,private var data:String):IHttpResultEntity<T>{
override val errorCode: Int
get() = errno
override val errorMessage: String
get() = error
override val isSuccess: Boolean
get() = errno==0
override val result:T
get() = RSAUtil.dataDecrypt(RSAUtil.getKeyPassword(), data,T::class.java)!!
class RSAUtil {
companion object {
fun <T> dataDecrypt(password: String, data: String, java: Class<T>): T? {
val content = Base64.decode(data.toByteArray(), Base64.NO_WRAP)
try {
var deString = decrypt(content, password)
if (!deString.isEmpty()){
val first = deString.substring(0, deString.lastIndexOf(":") + 1)
deString = "$first$deString}"
return Gson().fromJson(deString,java)
}
return null
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
}
}
答案 0 :(得分:0)
您应该这样更改dataDecrypt
:
inline fun <reified T> dataDecrypt(password: String, data: String): T? {
...
try {
...
if (!deString.isEmpty()){
...
return Gson().fromJson(deString, T::class.java)
}
...
}
}
在呼叫站点上,将从T
推断出result
类型:
override val result:T
get() = RSAUtil.dataDecrypt(RSAUtil.getKeyPassword(), data)!!
您可以阅读有关内联函数和修饰类型here的更多信息,我强烈建议您这样做。我还要指出,您的代码格式错误,建议在nullability checks中使用?:
而不是!!
,并且在Kotlin中不建议使用伴随对象,您可以在分类并使用(或导入)它们,就像它们是静态的一样。