inline函数 3个月前

编程语言
265
inline函数

inline函数

inline内联函数,最终编译时是要编译到调用它的代码块中,这时候T的类型实际上是确定的,因而Kotlin通过reified这个关键字告诉编译器,T这个参数可不只是个摆设,我要把它当实际类型来用呢。

inline fun <reified T: Any> Gson.fromJson(json: String): T{
    return fromJson(json, T::class.java)
}

interface Api {
    fun getSingerFromJson(json: String): BaseResult<Singer>
}

object ApiFactory {
    val api: Api by lazy {
        Proxy.newProxyInstance(ApiFactory.javaClass.classLoader, arrayOf(Api::class.java)) {
            proxy, method, args ->
            val responseType = method.genericReturnType
            val adapter = Gson().getAdapter(TypeToken.get(responseType))
            adapter.fromJson(args[0].toString())
        } as Api
    }
}

fun main(args: Array<String>) {
    val json = File("result_singer_field_loss.json").readText()
    val result : BaseResult<Singer> = ApiFactory.api.getSingerFromJson(json)
    println(result.content.name.isEmpty())
}
package com.benny.utils
import android.util.Log
inline fun <reified T> T.debug(log: Any){
    Log.d(T::class.simpleName, log.toString())
}

debug(whatever)
image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2223540
累计阅读

热门教程文档

Python
76小节
C#
57小节
Kotlin
68小节
Typescript
31小节
Vue
25小节