首页
学习
活动
专区
圈层
工具
发布

【Kotlin】扩展函数 ② ( 扩展属性 | 为可空类型定义扩展函数 | 使用 infix 关键字修饰单个参数扩展函数的简略写法 )

文章目录 一、扩展属性 二、可空类扩展 三、使用 infix 关键字修饰单个参数扩展函数的简略写法 一、扩展属性 ---- 上一篇博客 【Kotlin】扩展函数 ( 扩展函数简介 | 为 Any 超类定义扩展函数...---- 之前讲的定义扩展函数 , 扩展属性 , 都是为 非空类型 定义的 , 如果要为 可空类型 定义扩展函数 , 则需要在 扩展函数 中 处理时 , 要多考虑一层 接收者 this 为空 的 情况...; 注意下面的调用细节 : 如果定义的 扩展函数 是 为 非空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时使用 " ?....非空类型扩展函数 如果定义的 扩展函数 是为 可空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时直接使用 " . " 进行调用即可 ; 可空类型实例对象.可空类型扩展函数 代码示例...---- 如果 扩展函数 只有 一个参数 , 并且在 扩展函数 定义时 使用了 infix 关键字修饰 , 在调用该扩展函数时 , 可以省略 接收者与函数之间的点 和 参数列表的括号 ; 调用 使用

2.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    与小清新的距离 你只差一个RxKotlin !

    Rx响应式编程的系列框架中,很多朋友对RxJava是最熟悉的,其实它还有很多同胞。比如:RxKotin, RxSwift,RxPhp, RxGo, RxNet, RxJS......,一想到iOS必定对RxSwift很熟悉, Android开发对RxJava却情有独钟!今天就来涨涨RxKotin的姿势! ?...流,具体细节可参考推荐文章。...RxKotlin RxKotlin是基于kotlin扩展的rx衍生体,对kotlin无需再普及,这种支持Lambdas语法的简洁姿势,会让代码变得小清新和灵活。可能你已经在java8上体验了一番。...通过这个简单的栗子,发现不管用rxJava, 还是只用retrofit, 通过使用rxkotlin将业务流程变得更加清晰,那么kotlin是否也有他的操作符,当然他也有过滤器,转换器,拆分符和rxjava

    1K10

    《Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using Rx Kotlin )《Kotlin 反应式编程》使用

    提示: 更多关于OkHttp 的使用可参考: http://square.github.io/okhttp/ 创建 Kotlin Gradle 项目 我们首先使用 IDEA 创建 Kotlin Gradle...Observer) ),对发送数据的 sender (也就是可被观察对象( Observable)) 所发射的数据或数据序列作出响应。...HttpRequestWrapper是扩展函数init()的接收者,点号 . 是扩展函数修饰符。 我们在函数体内直接调用了这个函数字面量 wrap.init() 。...本节工程源码: https://github.com/EasyKotlin/chatper14_kotlin_dsl_http 本章小结 相比于Java,Kotlin对函数式编程的支持更加友好。...Kotlin 的扩展函数和高阶函数(Lambda 表达式),为定义Kotlin DSL提供了核心的特性支持。 使用DSL的代码风格,可以让我们的程序更加直观易懂、简洁优雅。

    2K20

    【RxJava】ReactiveX 简介 ( ReactiveX 概念 | ReactiveX 组成部分 - 被观察者 观察者 操作符 调度器 订阅 | ReactiveX 支持语言 )

    一、RxJava 简介 1、ReactiveX 概念 RxJava 框架 是 ReactiveX ( Reactive Extensions 响应式编程扩展 ) 在 Java 语言 上的实现 , 该框架...Observers(观察者): Observer 是一个观察者 , 可以消费被观察者发送的事件,通过订阅 Observable 来 接收 数据项 或事件 ; Observer 可以定义对收到的数据项和事件的处理逻辑...Operators(操作符): 操作符是用于处理和转换 Observable 发射的数据流的函数。操作符可以用于过滤、变换、组合和聚合等操作,以便更灵活地处理数据。...RxJava - Java 语言 RxSwift - Swift 语言 RxKotlin - Kotlin 语言 RxJS - JavaScript 语言 开发者 可以 在 不同的平台 / 不同语言 中...使用 异步编程模型 和 操作符,提高了代码 的 可复用性 和 可维护性 ;

    1.4K10

    Android 须知2019流行的框架库及开发语言

    好了,闲话不多说了,下面一起来看看流行的技术吧。 图片加载库 Universal-Image-Loader,早期广泛被用的一个可重复使用的仪器为异步图像加载、缓存、显示。作者已经停止维护。...RxJava, 一个在 Java VM 上使用可观测的序列来组成异步的、基于观察者模式的实现的库。RxAndroid,函数响应式编程, 把 RxJava 带到 Android 环境中。...很多时候,编写 Android 程序,你也可以看成是数据的处理和流动,换一种思想编程,曾经看起来很棘手的问题,瞬间就很优雅的解决了,相信你会被这种build模式的开发会越来越爱。...抛弃沉重的 Java 语法,Kotlin 融入了很多现代编程语言的思想,作为开发者,接受新的语言,了解新语言的发展趋势,更有利于开阔你的思路和加深对语言的理解。...在 Android 开发上,使用 Kotlin 并不会让你付出什么代价,为什么不来试试?使用Kotlin进行Android开发。

    1.3K40

    Kotlin Coroutines Flow 系列(二) Flow VS RxJava2

    Flow VS RxJava Kotlin 协程库的设计本身也参考了 RxJava ,下图展示了如何从 RxJava 迁移到 Kotlin 协程。...) 借助扩展函数可以实现类似 RxJava 的 onCompleted() 功能,只有在正常结束时才会被调用: fun Flow.onCompleted(action: () -> Unit...RxJava2 Flowable 支持的 Backpressure 策略,包括: MISSING:创建的 Flowable 没有指定背压策略,不会对通过 OnNext 发射的数据做缓存或丢弃处理。...这一点跟 DROP 策略一样,不同的是,不管缓存池的状态如何,LATEST 策略会将最后一条数据强行放入缓存池中。 而 Flow 的 Backpressure 是通过 suspend 函数实现。...fun Flow.onBackpressurureDrop() : Flow = FlowOnBackpressureDrop(this) 使用这个库的话,可以通过使用 Flow 的扩展函数

    1.1K10

    Android 必须知道2019年流行的框架库及开发语言,看这一篇就够了!

    好了,闲话不多说了,下面一起来看看流行的技术吧。 图片加载库 Universal-Image-Loader,早期广泛被用的一个可重复使用的仪器为异步图像加载、缓存、显示。作者已经停止维护。...RxJava, 一个在 Java VM 上使用可观测的序列来组成异步的、基于观察者模式的实现的库。 RxAndroid,函数响应式编程, 把 RxJava 带到 Android 环境中。...很多时候,编写 Android 程序,你也可以看成是数据的处理和流动,换一种思想编程,曾经看起来很棘手的问题,瞬间就很优雅的解决了,相信你会被这种build模式的开发会越来越爱。...抛弃沉重的 Java 语法,Kotlin 融入了很多现代编程语言的思想,作为开发者,接受新的语言,了解新语言的发展趋势,更有利于开阔你的思路和加深对语言的理解。...在 Android 开发上,使用 Kotlin 并不会让你付出什么代价,为什么不来试试? 使用Kotlin进行Android开发。

    2.6K70

    Kotlin 学习笔记(五)—— Flow 数据流学习实践指北(一)

    使用方和提供方是一对一的关系。 热流(Hot Flow):无论有无使用方,提供方都可以执行发送数据流的操作,提供方和使用方是一对多的关系。热流就是不管有无消费,都可生产。...是集合的扩展方法,可将其他数据转换成 Flow,例如 Array 的扩展方法: //code 4 public fun Array.asFlow(): Flow = flow {...forEach { value -> emit(value) } } 不仅 Array 扩展了此方法,各种其他数据类型的数组都扩展了此方法。...,zip 方法的第二个参数就是针对两个 Flow 进行各种处理的挂起函数,也可如例子中写成尾调函数的样子,返回值是处理之后的 Flow。...不同的是 Flow 是将接收到的数据放到 Flow 载体中,而 RxJava 一般将数据放到 Observable 对象中;Flow 处理数据更加方便和自然,去除了 RxJava 中繁多且功能臃肿的操作符

    1.9K21

    Google 推荐在 MVVM 架构中使用 Kotlin Flow

    Flow 库是在 Kotlin Coroutines 1.3.2 发布之后新增的库,也叫做异步流,类似 RxJava 的 Observable 、 Flowable 等等,所以很多人都用 Flow 与...> 接受数据的速度,LiveData 无法正确的处理这些请求 使用 LiveData 的最大问题是所有数据转换都将在主线程上完成 RxJava 虽然支持线程切换和背压,但是 RxJava 那么多傻傻分不清楚的操作符...: Flow 支持线程切换、背压 Flow 入门的门槛很低,没有那么多傻傻分不清楚的操作符 简单的数据转换与操作符,如 map 等等 Flow 是对 Kotlin 协程的扩展,让我们可以像运行同步代码一样运行异步代码...方法二 中的 liveData{ ... } 的封装 asLiveData 是 Flow 的扩展函数,返回值是一个 LiveData liveData{ ... } 协程构造方法提供了一个协程代码块,在...}) } } 到这里关于 Kotlin Flow 在 MVVM 当中每层的实践就分析完了,如果使用过 RxJava 的小伙伴们应该会非常熟悉,对于没有使用过 RxJava 的小伙伴们

    5.4K21

    Reactor响应式编程 之 简介

    调用 get() 方法会阻塞; 缺乏对多值和高级错误处理的支持。 1.3 从命令式到响应式 作为响应式编程方向上的第一步,Microsoft在.NET生态中创建了响应式(Rx)扩展库。...在底层,它使用 Project Reactor,但是,你也可以将它与 RxJava (或任何其他的响应流实现)一起使用,它甚至可以与 Kotlin 协程一起工作。...换句话说, Reactor 是一个基础响应式包,Spring WebFlux 是一个框架,这个框架默认使用 Reactor,但是可以使用 RxJava,也可以使用 Kotlin 等其他响应式包。...Hello World 级示例:https://blog.csdn.net/get_set... 6.2 RxJava2 ReactiveX 结合了观察者模式、迭代器模式和函数式编程的最佳思想。...它扩展了观察器模式,以支持数据序列和/或事件,并添加了操作符,允许您以声明的方式将序列组合在一起,同时抽象出诸如低级线程、同步、线程安全、并发数据结构和非阻塞I/O等问题。

    1.4K80

    Android快速转战Kotlin教程

    NO.3 《疯狂Kotlin讲义》 ? 本书尤其适合从Java转Kotlin的读者,对于没有Java功底的读者,可忽略“对比”部分,直接学习本书也可掌握Kotlin编程。...本书对Kotlin的解读十分系统、全面,超过Kotlin官方文档本身覆盖的内容。...本书很多地方都会结合Java字节码进行深入解读,比如对Kotlin扩展的解读,对Kotlin主、次构造器的解读,这种解读目的不止于教会读者简单地掌握Kotlin的用法,而是力求让读者深入理解Kotlin...第一部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。...项目通过一个天气的例子很好的展示了kotlin带来的强大功能,比如网络数据的请求,数据的缓存设计,数据库的操作,各种扩展函数的妙用等等。

    2.9K22

    用Kotlin的方式来处理网络异常

    其中,可以使用 RxJava 的错误处理操作符,它们是专门用来处理异常的。 随便例举两个操作符: onErrorReturn 操作符,表示当发生错误的时候,发射一个默认值然后结束数据流。...所以 Subscriber 看不到异常信息,看到的是正常的数据流结束状态。 onErrorResumeNext 操作符,表示当错误发生的时候,使用另外一个数据流继续发射数据。...在返回的被观察者中是看不到错误信息的。 二. 使用 Kotlin 的特性 这次我结合 Kotlin 扩展函数的特性来尝试处理异常。...的错误处理操作符,可以编写如下的扩展函数: import com.safframework.utils.RetryWithDelay import io.reactivex.Maybe /**...它的 action 参数传递的是一个函数,专门用于处理异常。每一个网络请求的异常处理并不会都一样,可以用该函数来传递不同的异常处理。 总结 合理利用 Kotlin 的扩展函数,可以编写优雅的代码。

    59820

    轻量级kotlin + Mvp + Rxjava + Retrofit框架

    大家好,又见面了,我是你们的朋友全栈君。 适合团队的框架才是好的框架 1.项目简介 本项目是基于kotlin + Mvp + Rxjava + Retrofit 封装的轻量级模板项目。...工具类 │ ├── view view控件 │ ├── Constants.kt 全局常量 │ ├── Extensions.kt 扩展函数...+Retrofit+Dagger+组件化 Kotlin+Mvp+Rxjava+Retrofit 使用方便,还有一键生成工具,冗余代码过多,不适合快速开发 使用方便,适合快速开发以及新手...适合团队的框架才是好的框架 5.技术要点 主要使用的第三方开源框架有: RxJava RxAndroid Retrofit Glide Logger SmartRefreshLayout 6.后续更新...glide封装 rxjava封装 各种工具类封装 shape以及gradient各种图形封装 动画封装 8.特别感谢 MvpArms KotlinMvp 9.项目地址 你的Star和Fork是我永生的追求

    56860

    reactor 第一篇 响应式简介

    调用 get() 方法会阻塞; 缺乏对多值和高级错误处理的支持。 1.3 从命令式到响应式 作为响应式编程方向上的第一步,Microsoft在.NET生态中创建了响应式(Rx)扩展库。...在底层,它使用 Project Reactor,但是,你也可以将它与 RxJava (或任何其他的响应流实现)一起使用,它甚至可以与 Kotlin 协程一起工作。...换句话说, Reactor 是一个基础响应式包,Spring WebFlux 是一个框架,这个框架默认使用 Reactor,但是可以使用 RxJava,也可以使用 Kotlin 等其他响应式包。...6.3 RxJava2 ReactiveX 结合了观察者模式、迭代器模式和函数式编程的最佳思想。...它扩展了观察器模式,以支持数据序列和/或事件,并添加了操作符,允许您以声明的方式将序列组合在一起,同时抽象出诸如低级线程、同步、线程安全、并发数据结构和非阻塞I/O等问题。

    56710

    第10章 使用 Kotlin 创建 DSL第10章 使用 Kotlin 创建 DSL

    在Kotlin 中创建 DSL , 一般主要使用下面3个特性: 扩展函数、扩展属性 带接收者的 Lambda 表达式(高阶函数) invoke 函数调用约定 例如上面的示例的 UI {...}...我们知道,对一个函数predicate: (T) -> Boolean我们可以直接这样调用predicate(element), 这样的代码实例我们可以在List的扩展函数filter To 中看到 public...Observer) ),对发送数据的 sender (也就是可被观察对象( Observable)) 所发射的数据或数据序列作出响应。...源码详见: https://github.com/EasyKotlin/chatper14_kotlin_dsl_http 本章小结 相比于Java,Kotlin对函数式编程的支持更加友好。...Kotlin 的扩展函数和高阶函数(Lambda 表达式),为定义Kotlin DSL提供了核心的特性支持。 使用DSL的代码风格,可以让我们的程序更加直观易懂、简洁优雅。

    1.6K20

    Kotlin 学习笔记(二)

    在上篇笔记中,我们对 Kotlin 的基本类型、关键字、类与对象,以及与 Java 之间互调的内容有了一些认识,这篇笔记来看看 Kotlin 中几种特殊的类,以及集合相关的常用操作。 1....Kotlin 数据类 Kotlin 语言中有个特殊的类叫 数据类,这个类型是 Kotlin 专门用来表示一个 Java Bean 的,为啥这么说?因为它帮我们自动生成了一个数据类应该有的方法。...一行 Kotlin 竟然帮我们干了这么多事!这也说明用 Kotlin 确实能减少代码量,提升 Coding 效率。再看看 Kotlin 数据类的特点。...Kotlin 常用集合 在 Kotlin 中常用的集合类主要有 List:有序集合,可通过索引访问元素;Set:唯一元素集合,无重复元素的集合;Map:键值对集合,键是唯一的。...Kotlin 集合操作符 Kotlin 为集合扩展了许多操作符,而且这些操作符还支持链式调用,非常方便。相比于 RxJava 来说,代码量会少很多。照例还是举个栗子吧。

    72010

    响应式编程|Kotlin与LiveData扩展函数实践技巧

    LiveData Extensions 扩展函数库 本文想要介绍的LiveData Extension借鉴了很多响应式编程的原理,我们要做的就是将数据包装到流中,然后订阅它以监听它的变化。...在这个例子里,我们更清晰地看到,扩展函数与高阶函数的意义不仅仅是语法糖,更在于实现链式表达。链式表达是易于理解的,人总会习惯地认为书写在先,时间顺序上也是先发生的。...想要落地例子中的解决方案,我们的工作重点,就在于实现LiveData的扩展函数map。更多的,如果我们想构建多种多样的关系,我们就需要一整套的LiveData Extension库作为解决方案。...我们在git上开源了这些LiveData扩展函数,你可以通过这个网址[LiveDataExtensions](https://github.com/GunNan/LiveDataExtensions)获取到更多的操作符以及源码的信息...重构播放页,一方面是为了提高播放页的可维护性、可扩展性,另一方面是为了尝试最新的Kotlin语言特性与[《Jetpack应用架构指南》](https://developer.android.google.cn

    1.8K10
    领券