- 创建集合Map
listOf(1,2,3) // 不可变ArrayList
arrayListOf(1,2) // ArrayList
//set和list一个套路,还有linkedSetOf等
hashMapOf( 1 to "one", 2 to "Two")
- 让函数更好调用
- 命名参数
fun subString(src: String ,start : Int, length: Int) = src.subSequence(start,length) subString("string", start = 0 , length = 2) //调用时声明参数名称,利于代码的阅读
- 默认参数
fun method ( param: String = "defalut") = param method() // param == "defalut"
- 用顶层函数和属性代替静态工具类:
顶层属性方法相当于静态类的属性和方法
const val 常量 = "" 相当于Java的 public static final String 常量 = ""
- 扩展类的函数和属性
- 扩展函数
对java来说就是一个类的静态方法
//Util.kt
fun String.lastChar(): Char = this.get(length -1) // 为String类扩展一个函数
fun String.lastChar(): Char = get(length -1) //简化版
在其他文件中要让扩展函数生效需要导入
import 声明文件名.lastChar
import 声明文件名.lastChar as last // 别名
在java中调用扩展函数的方式
UtilKt.lastChar("string") // g
对于父类和子类都扩展的函数,用声明类型调用就调用什么类型的方法(由于实现方式是静态方法)
fun List<String>.print() = "list"
fun ArrayList<String>.print() = "arrayList"
val list: List<String> = arrayListOf("")
val arrayList : ArrayList<String> = arrayListOf("")
list.print() // "list"
arrayList.print() // "arrayList"
- 扩展属性
相当于添加一个getter,setter,但是不能存储该属性var StringBuilder.lastChar: Char get() = get(length - 1 ) //getter必须实现 set(value: Char){ // setter可选 this.setCharAt(length - 1, value) } // java调用 UtilKt.getLastChar("string") // g
- 可变参数 :
fun listOf<T>(vararg values: T): List<T> {...}
==
List<T> listOf(T ...){...}
Kotlin 对于 数组(vararg,Array)需要用展开运算符*
val arr = listOf("1","2")
val arrCopy = listOf( *arr)
5.中缀运算符: to
1.to("one) 等同于 1 to "one" // 结果是Pair(1,"one)
6.字符串和正则表达式
// '"" """ 三重引号字符串中不需转译
// 另外三重引号字符串换行会保存换行符(和Python差不多)
val regex = """ (.+)/(.+)\.(.+)""".toRegex()
7.kotlin可以在函数中声明函数来提高代码之间的联系性,函数必须先声明调用
8.使用扩展将代码变得更整洁: p67
网友评论