Kotlin使用技巧(1)-->标准函数、静态方法、常量

一、标准函数with、run、apply

标准函数是指在Standard.kt文件中定义的函数,任何的Kotlin代码都可以自由的调用。
我们之前在[Kotlin基础(8)-->空指针检查(https://www.jianshu.com/p/3c1b53b239bf)已经学习了let标准函数,主要作用就是配合?.操作符来进行辅助判空处理,这里就不再赘述了。

1.with函数

定义:with函数接收两个参数,第一个可以是任意类型的对象,第二个是lambda表达式。with函数会在lambda表达式中提供第一个参数的上下文,并使用lambda表达式中的最后一行代码最为返回值返回
作用:可以在连续调用同一个对象的多个方法时让代码变得更加精简
例子
原始代码:

val list = listOf("Apple", "banana", "orange")
var builder = StringBuilder()
builder.append("start eat \n")
for (i in list) {
    builder.append("$i,\n")
}
builder.append("finish")
val result = builder.toString()
print(result)

使用with函数

val list = listOf("Apple", "banana", "orange")
val result= with(StringBuilder()){
    append("start eat \n")
    for (i in list) {
        append("$i,\n")
    }
    append("finish")
    toString()
}
print(result)
2.run函数

run函数使用场景和with十分相似。
区别是:(1)run函数是不能直接调用的,一定要调用某个对象的run函数才行。(2)run函数只接受一个lambda参数。
例子:

val result = StringBuilder().run {
    append("start eat \n")
    for (i in list) {
        append("$i,\n")
    }
    append("finish")
    toString()
}
print(result)
3.apply函数

apply函数用法和run十分相似。
区别是:apply函数无法返回指定返回值,而是会自动返回调用对象本身
例子:

val list = listOf("Apple", "banana", "orange")
val result = StringBuilder().apply {
    append("start eat \n")
    for (i in list) {
        append("$i,\n")
    }
    append("finish")
}
print(result.toString())
3.repeat函数

repeat函数允许你传入一个数值n,之后会把lambda表达式中的内容执行n遍。例:

repeat(3){
    print("Hi")
}
//输出日志:Hi Hi Hi

二、定义静态方法

静态方法又叫做类方法,指的是那种不需要创建实例就可以调用的方法。
Java中,只要在方法前声明static关键字就是静态方法。
Kotlin中并没有直接定义的静态方法的关键字,但是提供了一些语法特性来支持类似于静态方法调用的写法,基本可以满足我们平时的需求了。

1.companion object

这个关键字实际上会在Util类的内部创建一个伴生类,而action2()方法就是定义在这个伴生类的实例方法。
Kotlin会保证Util类始终只会存在一个伴生类对象。调用Util.action2()方法实际上是调用了Util半身类对象的action2()方法。

class Util {
    fun action1() {}

    companion object {
        fun action2() {}
    }
}

调用

fun test() {
        Util.action2()
    }
2.定义静态方法

Kotlin提供了两种实现方式,注解和顶层方法

1.@JvmStatic注解

@JvmStatic注解只能加在单例类或者companion object中的方法上,如果加在一个普通方法上,会提示语法错误。例:

companion object {
        @JvmStatic
        fun action2() {}
    }

如此,Kotlin编译器就会将这些方法编译成真正的静态方法。
如果不加@JvmStatic,在java中只能这样调用:Util.Companion.action2();
如果加上,就和在kotilin中一样调用了:Util.action2()

2.顶层方法

顶层方法指的是那些没有定义在任何类中的方法。
Kotlin编译器会将所有的顶层方法全部编译为静态方法。

定义一个顶层方法,就是创建一个Kotlin文件,类型选择File。命名。
比如现在定义了一个文件名为Helper.kt,里面有doSomeThing()方法。Kotlin编译器还会自动创建一个叫HelperKt的Java类。

如何调用顶层方法呢?
在Kotlin中:直接调用doSomeThing()方法。
在Java中:HelperKt.doSomeThing()

二、常量

定义常量的关键字是const
注意:只有在单例类、companion object或顶层方法中,才可以使用const关键字

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355