Kotlin. Android. Проблемы с переменной-классом
Я недавно начал изучать Kotlin, до этого довольно долго работал на Python. И при попытке создать свое первое приложение у меня возникла проблема. Я хотел написать вспомогательный класс для взаимодействия с API, я хотел сделать его универсальным и абстрактным, но я не могу понять, как передать класс, определенный переменной, в функцию с <>, и я не совсем уверен, что я правильно получаю класс переменной в функции, можете ли вы мне помочь?
package com.example.dndhelper.DataClasses
import android.content.Context
import android.util.Log
import android.widget.Toast
import com.android.volley.Request
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import com.beust.klaxon.Klaxon
import com.example.dndhelper.DataClasses.Spells.SpellsResponse
import org.json.JSONObject
class UrlHelper() {
fun get(context: Context , url: String, dataClass: Any) {
val response: String = getResponse(context, url)
val json: JSONObject = parseSpells(response, dataClass)
}
fun getResponse(context: Context, url: String): String {
var output: String = ""
val queue = Volley.newRequestQueue(context)
val stringRequest = StringRequest(
Request.Method.GET,
url,
{response->output = response},
{ Log.d("MyLog", "ValleyError: $it")},
)
queue.add(stringRequest)
return output
}
fun parseSpells(response: String, dataClass: Any): JSONObject {
// -------------------------------\/
val json = Klaxon().parseArray</**?**/>(response)
return json
}
Немного уточню вопрос еще раз. Можно ли в <> передавать класс определенный переменной, то есть записать например AbstractClass::class в переменную, и потом в другой части кода передать в <>? Я пытался сделать что-то вроде...
fun parseSpells(response: String, dataClass: Any) {
val json = Klaxon().parse<dataClass>(response)
}
... но это не работает
Ответы (1 шт):
Можно использовать типовой аргумент:
fun <T> parseSpells(response: String, dataClass: KClass<T>) {
val json = Klaxon().parse<T>(response)
}