Kotlin——局部函数、修改文件类名、中缀函数

471 阅读1分钟

给自己看系列

局部函数

  • 代码
// 局部函数
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));
    }

}
  • 作用 是在javakotlin代码混写的时候用到的注解。如果不添加注解,kotlin会根据所在文件名自动生成,如kotlin文件名为example3,那么自动生成的类名为Example3Kt,添加注解就可以随个人习惯修改。