字符串模板
:日志打印日常在java中打印日志会这样写:
Log.i("ChapterActivity", "onCreate: result = " + result + ", param = " + param);
但是通过+拼接字符串的行为比较低效,会间接创建不少的中间String对象。一般如果是使用很多个+拼接的字符串的行为,是建议使用StringBuild代替。 到了Kotlin这里更是提供了字符串模板简化操作:
Log.i("ChapterActivity", "onCreate: result = $result, param = $param")
当然本质上还是通过+
拼接的字符串。
而且kotlin的字符串模板中可以执行其他的逻辑操作,比如return
:
fun test2(name: String?) {
Log.i("ChapterActivity", "test2: ${name ?: return}")
}
虽然可以这样操作,但是在日志中执行非打印信息的行为在我看来是不可取的
,主要是有两个原因:
首先创建了一个StringBuild
对象,当name
不为null打印日志。但是当name
为null
的时,这个创建的StringBuild
对象就没被用到,反而增加了内存开销
for in
遍历集合是一个非常普遍的行为:
fun test2() {
val list = listOf("tom", "lily", "meg", "joe")
for (item in list) {
}
}
反编译成java代码:
可以看到for in的实现就是个迭代器Iterator,并实现其hasNext和next方法。所以我们也可以自定义个迭代器实现for in行为:比如打印当前类及其父类的所有public方法名称
输出:
非常的简单方便,自定义迭代器Iterator的行为在kotlin集合的扩展函数和sequence中非常普遍,大家有兴趣可以自定看下源码。
vararg
可变参数这个就类似于java中的XXX...,比如String...
fun test5(vararg names: String) {
println(names.size)
}
test5("和", "的", "吧", "啊")
如果把vararg
转换成list
集合,需要添加个*
:
val list = listOf(*names)
我们可以看下vararg
的Java源码:
可以看到vararg names: String就等价于于java的String...,使用的时候就是把vararg转换成了一个数组而已。
阅读量:1102
点赞量:0
收藏量:0