文章目录 一、Kotlin 变量可空性 1、Java 与 Kotlin 空值处理区别 2、Java 函数返回非空值和控制 3、Kotlin 函数调用 Java 函数 4、平台类型 5、@NotNull...和 @Nullable 注解 二、Kotlin 的 Java 类型映射 三、Kotlin 访问 Java 私有属性 四、Java 调用 Kotlin 函数 1、函数调用 2、分析 Kotlin 代码生成的字节码数据...3、使用 @JvmName 注解修改 Kotlin 生成的 Java 类名 一、Kotlin 变量可空性 ---- 1、Java 与 Kotlin 空值处理区别 在 Java 语言 中 , 任何 引用类型变量...默认情况下 所有的变量 都为 非空类型 ; 下面分别定义一个 Java 类 和 Kotlin 脚本 , 在 Kotlin 脚本调用调用 Java 类的成员 ; 2、Java 函数返回非空值和控制 代码示例...不知道 这个变量 是否为空 , 这种变量的类型 就称为 " 平台类型 " ; 所有的 平台类型 变量 都是 可空的 , Kotlin 会将其自动推断为 可空类型 ; 调用 平台类型 变量 的成员时 ,
Rx Kotlin ) 我们现在已经基本知道 Kotlin 中 DSL 的样子了。...提示: 更多关于OkHttp 的使用可参考: http://square.github.io/okhttp/ 创建 Kotlin Gradle 项目 我们首先使用 IDEA 创建 Kotlin Gradle...Rx扩展了观察者模式用于支持数据和事件序列。Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步I/O(非阻塞)数据流。 Rx库支持.NET、JavaScript和C++ 。...这种模式可以极大地简化并发操作,因为它创建了一个处于待命状态的观察者,在未来某个时刻响应 sender 的通知,而不需要阻塞等待 sender 发射数据。这个很像协程中的通道编程模型。...本节工程源码: https://github.com/EasyKotlin/chatper14_kotlin_dsl_http 本章小结 相比于Java,Kotlin对函数式编程的支持更加友好。
Java 8中的Optional 类型与 Kotlin 中的可空类型 在 Java 8中,我们可以使用 Optional 类型来表达可空的类型。...package com.easy.kotlin; import java.util.Optional; import static java.lang.System.out; /** * Optional.ofNullable...Kotlin 中的可空类型 上面 Java 8的例子,用 Kotlin 来写就显得更加简单优雅了: package com.easy.kotlin fun main(args: ArrayJava 8 Optional 提供的orElse s.orElse("").length(); 这个东东,在 Kotlin 是最最常见不过的 Elvis 运算符了: s?.length ?...: 0 相比之下,还有什么理由继续用 Java 8 的 Optional 呢? Kotlin 中的明星符号 ?????????????????????????????????????? ?: ?: ?
Rx系列最经典基于观察者模式带给大家直观的编程开发体验,受到很多开发者的青睐。...观察者,可观察者对象,如果细分有Schedulers,Flow对象等,Rx很好理解,就四大模块,观察者和被观察对象,他们产生的操作schdulers调度器, 它们两者产生的action的可操作的Flow...流,具体细节可参考推荐文章。...RxKotlin RxKotlin是基于kotlin扩展的rx衍生体,对kotlin无需再普及,这种支持Lambdas语法的简洁姿势,会让代码变得小清新和灵活。可能你已经在java8上体验了一番。...package rx.lang.kotlin import rx.Observable fun main(args: Array) { val list = listOf("
例如 Gradle、Anko 等都是我们使用通用编程语言(Java 和 Kotlin)创建的内部DSL。...提示: 更多关于OkHttp 的使用可参考: http://square.github.io/okhttp/ 我们首先使用 IDEA 创建 Kotlin Gradle 项目 ?...Rx扩展了观察者模式用于支持数据和事件序列。Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步I/O(非阻塞)数据流。 Rx库支持.NET、JavaScript和C++ 。...一个语言列表如下所示: Rx 支持的编程语言 项目主页 Java RxJava : https://github.com/ReactiveX/RxJava JavaScript RxJS:https:/...这种模式可以极大地简化并发操作,因为它创建了一个处于待命状态的观察者,在未来某个时刻响应 sender 的通知,而不需要阻塞等待 sender 发射数据。这个很像协程中的通道编程模型。
例如 Gradle、Anko 等都是我们使用通用编程语言(Java 和 Kotlin)创建的内部DSL。...提示: 更多关于OkHttp 的使用可参考: http://square.github.io/okhttp/ 创建 Kotlin Gradle 项目 我们首先使用 IDEA 创建 Kotlin Gradle...Rx扩展了观察者模式用于支持数据和事件序列。Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步I/O(非阻塞)数据流。 Rx库支持.NET、JavaScript和C++ 。...一个语言列表如下所示: Rx 支持的编程语言 项目主页 Java RxJava : https://github.com/ReactiveX/RxJava JavaScript RxJS:https:/...这种模式可以极大地简化并发操作,因为它创建了一个处于待命状态的观察者,在未来某个时刻响应 sender 的通知,而不需要阻塞等待 sender 发射数据。这个很像协程中的通道编程模型。
其实就算是长期接触Java的Android开发者,应该也接触过Rx系列组件,例如RxJava, RxSwift, RxKotlin等等,这些都是典型的基于响应式编程设计的组件。...比如RxJava,它的强大能力有目共睹,我一直建议要从响应式编程的角度去理解Rx系列,就像它的命名由来那样“R:表示Reactive,x:表示extension”。...我们首先思考的是 数据 ,让数据经过一系列的变化直接达到所需状态,这看起来就像是[观察者设计模式(Observer pattern)] (https://en.wikipedia.org/wiki/Observer_pattern...基于这个方法,我们可以给LiveData添加观察者,打通了最难的一步。很妙的是观察者本身也是LiveData类型,这样我们就可以实现链式观察者的程序。 例如最基础的map操作符: ?...重构播放页,一方面是为了提高播放页的可维护性、可扩展性,另一方面是为了尝试最新的Kotlin语言特性与[《Jetpack应用架构指南》](https://developer.android.google.cn
❞ 关于这个LiveData的新概念是,它具有生命周期意识,这意味着它尊重应用程序组件(Activity、Fragment)的生命周期状态,并确保LiveData只在组件(观察者)处于活跃的生命周期状态时更新它...LiveData的目的是在观察者处于/进入活动状态时向UI推送最新的值。你可以使用RX Flowable或Kotlin的Flow来正确处理这个问题。下面的图片展示了背压的正确处理。...因此,处理这种需求的最好方法是不使用LiveData作为生产者,而是使用RX类型或Kotlin,因为Kotlin支持多种高阶函数以及对Collections和Sequence的扩展。...LiveData的主要目的是在组件的生命周期中保持数据状态。如果数据只是在后台缓存或同步,你可以使用回调、RX类型或其他类型或异步操作。 4....你可以使用RX或Kotlin的coroutines对操作者和线程控制进行更有力的控制。LiveData并不能对你的线程管理提供完全的控制权。
1.4 LiveData 的替代者 1、RxJava: RxJava 是第三方组织 ReactiveX 开发的组件,Rx 是一个包括 Java、Go 等语言在内的多语言数据流框架。...然而 Rx 的学习门槛过高,对开发反而是一种新的负担,也会带来误用的风险。...; observeForever() 观察者:一直处于活跃状态; observe() 观察者:owner 宿主生命周期处于活跃状态。...,观察者绑定的生命处于活跃状态,并且 LiveData 存在已设置的旧数据; 2、调用 setValue() / postValue() 设置数据时,观察者绑定的生命周期处于活跃状态; 3、观察者绑定的生命周期由非活跃状态转为活跃状态...,因此在移除观察者之前都是活跃状态。
这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。...当我们的观察者生命周期处于 STARTD 或者 RESUMED 状态,LiveData 就会认为当前观察者处于活跃状态,此时就会触发相应的更新通知,而非活跃的观察者自然不会收到通知。...搞点小彩头,对于 非Kotlin 项目,你怎么用 Flow ? Flow: 那我走? Rx: 我来我来。...先说说 Flow ,其指的是 Kotlin 中的数据流,虽然功能上不如Rx强大,但在 Kotlin 的背景下,其无疑是最佳搭档,毕竟有协程这个好兄弟在,因此,Android团队建议使用 Flow 替换...如果你的项目是 Java 编写,那 LiveData 仍然是你维护页面数据状态的最好搭档。 如果你的项目是 Kotlin 编写,那么 LiveData 依然可以满足你的需求。
5 Rx的Java实现RxJava https://github.com/ReactiveX/RxJava Star29076 本月上涨 860 .Net响应式编程框架 Rx 的Java版本开源实现,有...它扩展了观察者模式以支持数据/事件序列,并添加了运算符,因此可以声明性地组合序列,同步抽象的低级线程,线程安全性和并发数据结构等问题。...6 基于 JVM 的新的编程语言kotlin https://github.com/JetBrains/kotlin Star19212 本月上涨 886 ?...Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。其主要设计目标: ● 创建一种兼容 Java 的语言 ● 让它比 Java 更安全,能够静态检测常见的陷阱。...的一个开源项目,包含许多 Google 核心的 Java 常用库。
观察者模式是一种行为设计模式,其中对象(主体)维护其依赖者(观察者)的列表,并自动通知它们任何状态更改。 此模式可确保在发生某些状态更改时通知多个对象。它广泛用于实现分布式事件处理系统。...观察者模式将主体与其观察者解耦,并允许动态添加或删除观察者。 Java 中的方法 让我们设计一个在温度变化时发送通知,让显示屏对应做出变化的气象站。...示例中: 该类WeatherStation维护一个对象列表Consumer,这些对象是 Java 中可与 lambda 表达式一起使用的函数接口。...Kotlin 的方法: Kotlin提供观察者委托功能。Delegates.observable()简化了对象属性更改的观察者模式实现: 您可以组合观察者委托来观察属性更改和高阶函数来注册回调。...表现力: 利用 Kotlin 的语言功能可以生成更具可读性和可维护性的代码。 Kotlin 特性简化了观察者模式 高阶函数和 Lambda: 使用函数(行为)作为参数来实现简洁的观察者实现。
androidx.lifecycle 包提供的接口和类可以帮助我们构建可感知生命周期的组件,这些组件就可以根据 Activity 或者 Fragment 的生命周期状态自行调整行为。...生命周期 Lifecycle 是一个类,它持有相关组件(例如 Activity 和 Fragment)的生命周期状态信息并且可以让其他对象观察到这个状态。...还可以使用可识别生命周期的组件在应用程序销毁时终止缓冲。 启动和停止网络连接。 使用可感知生命周期的组件可以在应用程序处于前台状态时实时更新(流式传输)网络数据,并在应用程序进入后台时自动暂停。...在幕后,它在决定调用其观察者之前调用 isAtLeast() 判断当前状态。...这将创建一个可能较长的时间间隔,在该时间间隔中,即使无法修改其 UI 状态,观察者仍认为生命周期处于活动状态。
前言 这里写了两种方式请求接口 (文中用了Java和Kotlin两种语言 没有特殊标示的都是Java) 普通方式 Rx方式 建议是用Rx方式 常用调用方式 依赖 名称 引用方式 作用 okhttp-OkGo...; import java.io.InputStream; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type...Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); return obs; } } 调用方式 Kotlin...subscribe { L.i(it.msg) } 页面销毁取消请求 要想页面销毁时取消网络请求 就要做如下修改 定义Activity的基类(请忽略onCreate中的方法 只是用来去掉状态栏的背景...) Kotlin open class SBaseActivity : AppCompatActivity() { var compositeDisposable: CompositeDisposable
5 Rx的Java实现RxJava https://github.com/ReactiveX/RxJavaStar29076 本月上涨 860 .Net响应式编程框架 Rx 的Java版本开源实现,有Groovy...它扩展了观察者模式以支持数据/事件序列,并添加了运算符,因此可以声明性地组合序列,同步抽象的低级线程,线程安全性和并发数据结构等问题。...6 基于 JVM 的新的编程语言kotlin https://github.com/JetBrains/kotlinStar19212 本月上涨 886 Kotlin 是一个基于 JVM 的新的编程语言...其主要设计目标: ● 创建一种兼容 Java 的语言 ● 让它比 Java 更安全,能够静态检测常见的陷阱。...的一个开源项目,包含许多 Google 核心的 Java 常用库。
concat/concatDelayError/concatArray/concatArrayDelayError 将多个被观察者按先后顺序串联起来。...Java 语言版本: Observable observable = Observable.create(new ObservableOnSubscribe() {....subscribe(new Consumer() { @Override public void accept(Object o) { Log.e("RX...", o.toString()); } }); Kotlin 语言版本 val observable = Observable.create> { emitter...意思大概是说,一旦有观察者订阅了之后,会先将被观察者发射的数据缓存起来,然后将缓存的数据一个接一个的发射出去。 对于外部调用来说,结果和 concat 作用没什么区别。
库 Android 中 RxJava 的使用 Rx相关依赖 implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation 'io.reactivex.rxjava2...3.0.4' implementation 'com.lzy.net:okrx2:2.0.2' //JSON转换 implementation 'com.alibaba:fastjson:1.2.46' Rx...中生命周期的控制,避免内存溢出等问题 https://github.com/pushtorefresh/storio ——数据库对RxJava的支持 https://github.com/f2prateek/rx-preferences...Throwable e) { } @Override public void onComplete() { } }); Kotlin...- aLong.intValue(); } }) .take(countTime + 1); } } 调用方式(Kotlin
它一直是Android会议上的一个永恒主题,通常都是用RxJava的例子来进行演示的(见底部的Rx部分)。...请记住,LiveData会将最新的值分派给新的观察者。另外,Lollipop中引入了Activity转换,它们带来了一个有趣的边缘情况:两个Activity处于活动状态。...上面的MediatorLiveData例子显示了一些代码的重复,所以我们可以利用Kotlin的扩展函数。...LiveData被设计为允许视图观察ViewModel。一定要把它用在这上面! 即使你已经使用了Rx,你也可以用LiveDataReactiveStreams进行通信。...然而,Rx有一个陡峭的学习曲线。LiveData转换(和Kotlin魔法)的组合可能足以满足你的情况,但如果你(和你的团队)已经投资学习RxJava,你可能不需要LiveData。
LiveData、Kotlin Flow 和 RxJava 三者都属于 可观察的数据容器类,观察者模式是它们相同的基本设计模式,那么相对于其他两者,Kotlin Flow 的优势是什么呢?...RxJava 是第三方组织 ReactiveX 开发的组件,Rx 是一个包括 Java、Go 等语言在内的多语言数据流框架。功能强大是它的优势,支持大量丰富的操作符,也支持线程切换和背压。...然而 Rx 的学习门槛过高,对开发反而是一种新的负担,也会带来误用的风险。 Kotlin 是 kotlinx 包下的组件,不是单纯 Android 生态下的产物。那么,Flow 的优势在哪里呢?...安全地观察 Flow 数据流 前面也提到了,Flow 不具备 LiveData 的生命周期感知能力,所以订阅者在监听 Flow 数据流时,会存在生命周期安全的问题。...Channel 是 Kotlin 中实现跨协程数据传输的数据结构,类似于 Java 中的 BlockQueue 阻塞队列。
目录 什么是Kotlin? 什么是Java?...主要区别: Kotlin 的特点 Java的特点 Kotlin 的历史 JAVA的历史 Kotlin 和 Java 的区别 Kotlin 的优势 Java的优势 Kotlin 的缺点 Java的缺点 哪个更好...Kotlin 和 Java 的区别 Kotlin 与 Java 这是 Kotlin 与 Java 之间的区别 Kotlin Java Kotlin 允许用户创建扩展函数。...Java 使用两个协程选项作为 1) Rx Java 和 2) Project Loom。 Kotlin 没有任何通配符类型。 wide-card在 Java 中可用。...大量熟练的开发人员可用 大量的第 3 方库 它允许您形成标准程序和可重用代码。 它是一个多线程环境,允许您在一个程序中同时执行多个任务。