Android Kotlin 、Retro-Lambda与RxJava结合的坑

一般来说,一个新项目是不会采用上面这种结构。使用Kotlin的目的是为了简化代码,提高代码可读性,在这里就不深究他与Java的优劣势了吧。Retro-Lambda是为了在Android上使用Java8中新增的Lambda表达式,也是为了让代码更简洁。RxJava是用来简化异步操作,让异步操作更容易。

今天在一个老项目上进行架构更新,我脑袋一热,没进行兼容性调研(Kotlin声称是与Java 100%兼容的)就将Kotlin引入进了项目中。但是但是万万没想到的是我用的Retro Lambda插件会对其编译有影响,导致运行Kotlin代码中有关RxJava.create 中的 emitter参数全是null. 由于Retro-Lambda在项目中已经存在很大的比例,移除并不现实,遂放弃加入Kotlin计划,待新项目时再引入重新规划。

例如下面简单的使用Kotlin创建的Observable,如果你的项目存在Retro lambda的话,调试的时候你会发现 it (emitter)是 null,但是Observable.just("xxx")是可以的。

Observable.create {
            Thread.sleep(Random().nextInt(1000).toLong())
            val address = "HeFei,AnHui"
            it.onNext(address)
            it.onComplete()
            Log.d("Kotlin", "${address}")
        }

好了,就说到这里了,给自己当记个笔记。


Android Kotlin 、Retro-Lambda与RxJava结合的坑_第1张图片
关注我的公众号.jpg

你可能感兴趣的:(Android Kotlin 、Retro-Lambda与RxJava结合的坑)