禅与计算机程序设计艺术Kotlin我的kotlin学习记录

Kotlin尬*学 靠直觉写出实现却不知其所以然

2017-12-14  本文已影响86人  橘子周二

不废话,上来就是痛点:
先看一下按照demo实例,通俗来说就未做封装

fun get(url:String):Weather?{
        val json = URL(url).readText()
        var t:Weather = Gson().fromJson(json,Weather::class.java)
        return t
    }

看到这一段代码,起初我只是想简单封装一下,达到根据范型解析的目的。
但是我发现,kotlin对范型做了更严格的约束,不能模糊范型。范型 T 不能直接获取class。
最后在stackoverflow上找到答案,配合使用 inline 和 reified (这样讲真是一点没水准 汗颜)
并且只能用于具体方法,且不可传递。
我凭直觉写出了下面代码,但是却无法合理的解释inline 嵌套后 的编译原理。
目前我没有查到可用的资料,后续会继续关注着,了该了再来补上
目前代码如下:


    inline fun <reified J> fromJson(json: String): J {
         var t: J = Gson().fromJson(json, J::class.java)
         return t
      }

    inline fun <reified C> execute(url: String): C {
        val json = URL(url).readText()
        var t: C = fromJson(json)
        return t
    }

如果恰巧您看到了这篇文章,又有资料的话,请你一定要在下方评论告知。多谢!


END

上一篇下一篇

猜你喜欢

热点阅读