Kotlin - 默认参数

Kotlin拥有丰富的语法糖。在本文中将详细介绍函数中的默认参数和与Java的互操作。

假如有个函数传入两个整型,返回其相加的值。第二个数在没有传入值时为0:

fun add(i:Int,default:Int = 0) = i+default

fun main(args: Array<String>) {
add(9)
}

有了默认参数就可以轻松的实现函数重载。但如果在Java中调用该方法时,你就会发现其只有一个函数,并不能实现重载:

private void test(){
MainKt.add(1,2);
}

因为Java在默认情况下识别默认参数,如果你想让编译器给你生成对应的方法来实现重载,只需要给该函数添加注解:@JvmOverloads 。

@JvmOverloads
fun add(i:Int,default:Int = 0) = i+default

通过将其反编译后可以看到:编译器会生成三个函数:两个重载方法和一个add$default方法:

public final class MainKt {
@JvmOverloads
public static final int add(int i, int var1) {
return i + var1;
}

// $FF: synthetic method
@JvmOverloads
public static int add$default(int var0, int var1, int var2, Object var3) {
if ((var2 & 2) != 0) {
var1 = 0;
}

return add(var0, var1);
}

@JvmOverloads
public static final int add(int i) {
return add$default(i, 0, 2, (Object)null);
}

public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
add$default(9, 0, 2, (Object)null);
}
}

在传入默认参数时,传入的Object始终为null,第三个参数是该位置的索引值。当索引值&位置不为0时则将第二个参数设置为默认值。

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00