给自己看系列
局部函数
- 代码
// 局部函数
class User(val id: Int, val name: String, val address: String)
// 验证——拓展函数
fun User.validateBeforeSave() {
// 此段位局部函数
fun validate(value: String, fieldName: String) {
if (value.isEmpty()) {
throw IllegalArgumentException("不能保存用户$id:空$fieldName")
}
}
// 此段位局部函数
validate(name, "姓名")
validate(address, "地址")
}
fun saveUser(user: User) {
user.validateBeforeSave()
// 保存
}
fun main() {
saveUser(User(id = 123, name = "", address = "青青草原"))
}
// Exception in thread "main" java.lang.IllegalArgumentException: 不能保存用户123:空姓名
- 作用 白话来讲,可在函数内写函数,多处复用。在符合情况处写,保持代码整洁,可读性增加,同时避免了重复代码。
中缀函数
- 代码
// 中缀函数
infix fun Int.plus(other:Int):Int{
return this + other
}
fun main() {
println(10 plus 20)
}
// 30
- 作用
可与只有一个参数的函数一起使用,要在函数前加
infix修饰符标记。如例子代码中一样效果。
修改文件类名
- 代码 kotlin
// 修改文件类名
@file:JvmName("JvmNameExample3")
fun Collection<String>.joinToString():String{
return this.joinToString(";","#","*")
}
fun main() {
println(listOf("张三","李四","王五").joinToString())
}
java
public class ExampleJava {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println(JvmNameExample3.joinToString(list));
}
}
- 作用
是在
java和kotlin代码混写的时候用到的注解。如果不添加注解,kotlin会根据所在文件名自动生成,如kotlin文件名为example3,那么自动生成的类名为Example3Kt,添加注解就可以随个人习惯修改。