Kotlin扩展函数本质到底是什么?

Kotlin扩展函数本质到底是什么?

先说点题外话。

不知道各位朋友,你们的项目中,有没有用kotlin,但是安卓领域,新项目,几乎都是用kotlin写了。

也许后端spring那一套,估计有很多老项目还是java,个人一点粗浅的看法,kotlin用过之后,是真香。

我写文章不喜欢一堆的名词,也不喜欢啰嗦。下面直接开始。

1. 什么是扩展函数?

比如在计算大数值的时候,经过要把字符串数据转成 BigDecimal , 再作运算

如下:调用 toBD() 扩展函数,把字符串转成 BigDecimal 对象

1var s = "123.02" 2var bd = s.toBD() //调用 toBD() 扩展函数

上面的 toBD() 就是扩展函数,而且是 String 的扩展函数

有人可能会问了,这种很简单啊,直接用 var bd = BigDecimal (s) , 就直接可以把字符串转成了 BigDecimal 对象

为啥还要用扩展函数呢?

  1. 首先这只是个例子,但就算是这个例子,如果 s = "helloworld.net" 呢,后端返回的值不一定是数字字符串。

    直接 var bd = BigDecimal (s) 会崩溃的。

  2. 那么用 toBD() 就不会崩溃了吗?

    toBD() 里面就可以写很多代码了,可以处理这种异常情况 。

2. 扩展函数怎么定义?

上面的 toBD() 用着简单,怎么定义呢?

  1. 在项目里面新建一个文件,比如叫 StringExt.kt

  2. 在此文件中,添加如下代码

    1fun String.toBD():BigDecimal? { 2 3 var bd :BigDecimal? = null 4 try { 5 // 这个this 就是上面的 "123.02" 6 //再比如,"100".toDB(), this 就是 "100" 7 bd = BigDecimal(this) 8 }catch (e:Exception) { 9 10 } 11 12 return bd 13}

    解释:fun String.toBD():BigDecimal?

    1. 在 String 类上添加一个 toBD() 的扩展方法,函数返回值是 BigDecimal?

    这是规定,规定就是这样写的。

    在哪个类上添加扩展方法,就 XX.method()

    比如想在 Int 类上添加一个方法, 就 fun Int.xx()

总结:定义就是这么简单,不要想复杂了。记住就行了。

3. 扩展函数的本质到底是什么呢?

对于 fun String.toBD():BigDecimal? 这个扩展方法

解释:其实kotin 并没有真正的在String类里面添加一个toBD() 的方法

扩展函数只是一个kotlin的语法糖,用着方便而已。

3.1 如果不用扩展函数,怎么实现上面的需求?

很多人应该能想到,就是写一个工具类,写一个静态函数。

1public class StringUtil { 2 public static BigDecimal toBD(String s){ 3 BigDecimal bd = null; 4 try { 5 bd = new BigDecimal(s); 6 }catch (Exception e) { 7 8 } 9 10 return bd; 11 } 12} 13

使用的时候:

BigDecimal bd = StringUtil.toBD("123.02")

总结: 写到这,应该明白了,kotlin扩展函数的本质 ,就是编译器在背后生成了静态函数

当然类名就不叫 StringUtil 了,至于叫什么,本文不讨论,不增加多余信息,再说你管它叫什么呢,爱啥叫啥

3.2 再重复一遍 : kotlin扩展函数的本质,就是静态函数

4. 扩展函数有什么用

代替Java中,那一坨坨的 xxUtils 工具类用的。

通过上面的学习,应该能明白了扩展函数是啥了

如果本文对你有一点帮忙,那我还是有一点点成就感的,很开心。

如文章有问题,请指正,我改

点赞
收藏

评论区

加载中...

相关推荐

Kotlin学习笔记

1概述这篇文章首先会介绍Kotlin的特点,接着介绍Kotlin与Java的语法比较。2Kotlin特点一门现代化的编程语言可开发跨平台应用,web,Socket,安卓,js,NativeApp等静态编程语言,性能基本与原声Java相当100%兼容Java(说是兼容但实际上

Spring Boot与Kotlin 整合全文搜索引擎Elasticsearch

Elasticsearch在全文搜索里面基本是无敌的,在大数据里面也很有建树,完全可以当nosql(本来也是nosql)使用。这篇文章简单介绍SpringBoot使用Kotlin语言连接操作Elasticsearch。但是不会做很详细的介绍,如果要深入了解Elasticsearch在Java/kotlin中的使用,请参考我之前编写的《Elastic

Java 8 中的 Lambda 表达式 vs. Kotlin 中的 Lambda

直接上一段Kotlin的函数式编程的代码:packagecom.easykotlin.lec02funsum1(x:Int,y:Int):Int{returnxy}funsum2(x:Int,y:Int)xy//

Better Kotlin

本文由 南尘 授权转载发布第59次推文贺贺转眼间使用Kotlin已经有两个月了,时间不长,我也算搭上了Google宣布Kotlin作为官方支持语言的一波末班车。可能大家早已从纯Java开发Android转为了混合使用开发甚至是Kotlin开发,那你转向Kotlin的初衷又是什么呢?对于我,很简单,

Kotlin Primer·第五章·函数与闭包

国内目前已经有几家公司开始大规模使用Kotlin开发,沪江就是其中一个。本文来自沪江工程师之手,且看他怎么认识Kotlin,欢迎大家关注他的博客——http://kymjs.com/,也欢迎大家关注Kotlin中文博客http://www.kotliner.cn/函数与闭包的特性可以算是Kotlin语言最大的特性了

Spring Boot 与 Kotlin 上传文件

如果我们做一个小型的web站,而且刚好选择的kotlin和SpringBoot技术栈,那么上传文件的必不可少了,当然,如果你做一个中大型的web站,那建议你使用云存储,能省不少事情。这篇文章就介绍怎么使用kotlin和SpringBoot上传文件构建工程如果对于构建工程还不是很熟悉的可以参考《我的第一个Kotlin应用》