重载泛型

正常情况下,如果你写了一个使用默认参数值得Kotlin方法,在Java中必须是全签名的形式,使用所有的参数展现形式。如果你希望暴露更多的重载给Java调用者,你可以使用@JvmOverloads注解。

@JvmOverloads fun f(a: String, b: Int = 0, c: String = "abc") {
    ...
}

对每个使用默认值的参数,会生成一个额外的重载(包括有默认值的参数和移除该参数右边的参数列表的参数),在上面的例子中,下面的方法会被生成:

// Java
void f(String a, int b, String c) { }
void f(String a, int b) { }
void f(String a) { }

注解也适用于构造器、静态方法等。注解不能使用在抽象方法,包括定义在接口中的方法。

需要注意的是,就像Secondary Constructors中描述的一样,如果类的每一个构造器参数有一个默认值,一个公共的没有参数的构造器就会生成,即使没有指定@JvmOverloads注解。

results matching ""

    No results matching ""