Нельзя использовать 'T' в качестве параметра типа reified - PullRequest
0 голосов
/ 02 апреля 2019

/ ** этот "T :: class.java" сообщает об ошибке: невозможно использовать 'T' в качестве параметра типа reified.Используйте класс вместо этого!так как я могу это исправить или что я могу сделать, чтобы реализовать этот путь? пожалуйста.** / см. следующий код котлина

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
 }
 }
 }

1 Ответ

0 голосов
/ 02 апреля 2019

Вы должны изменить 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)!!

Вы можетеУзнайте больше о встроенных функциях и типах reified здесь , и я настоятельно рекомендую это сделать.Я также хотел бы отметить, что ваш код плохо отформатирован, рекомендуется использовать ?: вместо !! в проверках обнуляемости , а сопутствующие объекты не рекомендуется использовать в Kotlin, вы можете определять функции вне классаи использовать (или импортировать) их, как если бы они были статичными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...