2019-06-14:Kotlin 中注解 @JvmOverloads 的作用?
Moosphan opened this issue · 8 comments
在Kotlin
中@JvmOverloads
注解的作用就是:在有默认参数值的方法中使用@JvmOverloads
注解,则Kotlin
就会暴露多个重载方法。
@JvmOverloads fun f(a: String, b: Int=0, c:String="abc"){
}
// 相当于Java三个方法 不加这个注解就只能当作第三个方法这唯一一种方法
void f(String a)
void f(String a, int b)
// 加不加注解,都会生成这个方法
void f(String a, int b, String c)
@jvmoverloads注解的作用就是:在有默认参数值的方法加上@jvmoverloads注解,则Kotlin就会暴露多个重载方法。可以减少写构造方法。
例如:没有加注解,默认参数没有起到任何作用。
fun f(a: String, b: Int = 0, c: String="abc"){
...
}
那相当于在java中:void f(String a, int b, String c){
}
如果加上注解@JvmOverloads ,默认参数起到作用
@JvmOverloads
fun f(a: String, b: Int = 0, c: String="abc"){
...
}
相当于Java中:
三个构造方法,
void f(String a)
void f(String a, int b)
void f(String a, int b, String c)
@jvmoverloads注解了有参方法,该方法就会有很多重载方法。如
@jvmoverloads
fun method (a:Int,b:String,c:Boolean)
现在method可以有三个注解方法
kotlin 我还没学怎么办
kotlin 我还没学怎么办
快学起来!!!
讲真,看到上面的回答都有问题,忍不住回答一下。
Kotlin 中类似 @JvmXxx 这样的注解都是专门为了兼容 Java 而存在的。纯 Kotlin 开发的话,完全可以不使用 @jvmoverloads,也能有多种重载构造方法的效果,默认参数也会生效。
加上 @jvmoverloads,只是为了在 Java 中使用这个 Kotlin 类时,能访问到多个重载方法。
讲真,看到上面的回答都有问题,忍不住回答一下。
Kotlin 中类似 @JvmXxx 这样的注解都是专门为了兼容 Java 而存在的。纯 Kotlin 开发的话,完全可以不使用 @jvmoverloads,也能有多种重载构造方法的效果,默认参数也会生效。
加上 @jvmoverloads,只是为了在 Java 中使用这个 Kotlin 类时,能访问到多个重载方法。
根据你的回答 我在说下上边的问题把,在 kotlin 中,你给参数赋值之后,可以不用传对应的参数,因为赋值的数据相当于默认值,除此楼外的回答都是不完全正确的。
fun getPersonal() {
setPersonal()
setPersonal("WhenSun1")
setPersonal ("WhenSun2", 11)
}
fun setPersonal (name: String = "WhenSun", age: Int = 10){
println("$name $age")
}
输出结果:
WhenSun 10
WhenSun1 10
WhenSun2 11
在kotlin 中函数的参数是可以有默认值的,在使用时也可以使用参数名称传入具体的函数而不用根据顺序传入,这样就规避掉了函数的重载,不用写多个函数签名了,但是在 Java 中是不行的,加上这个注解之后,会根据参数的默认值情况生成对应的重载函数。