Kotlin知识拾遗之--->为函数添加@JvmOverloads注解

661 阅读1分钟
1、为带有默认参数的Kotlin函数添加@JvmOverload注解
init {
    add(1)
    add(1,3)
}

// 此处是一个带有默认参数的函数,在Kotlin中调用时既可以传第一个参数也可以传入两个参数 by xiaojin on 7/24/21 10:17 PM
fun add(a:Int,b:Int = 0){
    println("a + b = ${a + b}")
}

带有默认参数的Kotlin函数,在Kotlin调用中很方便,入参比较灵活,但是在Java中调用时却不同

image.png 如上图所示,在Java中必须传递所有入参。 但是当我们采用如下的写法时

init {
    add(1)
    add(1,3)
}

// 此处是一个带有默认参数的函数,在Kotlin中调用时既可以传第一个参数也可以传入两个参数 by xiaojin on 7/24/21 10:17 PM
@kotlin.jvm.JvmOverloads fun add(a:Int, b:Int = 0){
    println("a + b = ${a + b}")
}

在Java中调用时会和在Kotlin中一样

class Test {
    private static void test(){
        new NullType().add(1);
        new NullType().add(1,2);
    }
}

@JvmOverloads注解的作用是为我们生成多个重载函数。 需要注意的是,此注解可同样应用在构造函数中。

2、在构造函数中使用@JvmOverloads注解

这里只提供一个写法示例

data class Person @JvmOverloads constructor(
    val name:String,
    val tel:String? = "10233",
    val address:String = "青岛"
)