字符串模板:日志打印日常在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转换成了一个数组而已。
阅读量:1140
点赞量:0
收藏量:0