遇到困难了呀,一直卡在这里,家人们帮帮我吧。。。
来源:12-5 案例:仿官方框架实现 runBlocking

慕前端9039556
2020-10-19
一个简单得小demo:
反编译后:
问题:想知道红框里面 case 0执行得时候 那个$continuation对象是谁啊?是label20代码块里面新创建的还是 demo里面传进来的呀。。。。
写回答
1回答
-
bennyhuo
2020-10-20
从反编译的结果来看,关键在于传进来的是不是 <undefinedtype>,这个类型应该是反编译的时候不认识,实际上应该是一个真实存在的类型,你可以在字节码当中搜一下。
如果是,就强转,并且退出这个代码块(注意 break label20),实际的情况应该会走这个分支。
不是的话,则创建 ContinuationImpl。
编译器编译的结果经常会有变化,但Kotlin 源代码的语义不会变,更多信息同学自己可以分析一下。
需要提醒的是,反编译很多时候确实会找到答案,但这个方法的运用也要建立在自己对字节码以及 Kotlin 的语法设计有足够的理解的前提上,不然反而更加困惑。
122020-10-20
相似问题