Kotlin.jvm - @JvmOverloads

Kotlin的@JvmOverloads注解允许编译器为具有默认参数的方法生成Java友好的重载。这样,Java调用者可以更方便地使用具有默认值的Kotlin函数,而无需提供所有参数。当类的所有构造函数参数都有默认值时,还会自动生成无参构造函数。此特性适用于构造函数、静态方法等,但不适用于抽象方法。
摘要由CSDN通过智能技术生成

@JvmOverloads:


Instructs the Kotlin compiler to generate overloads for this function that substitute default parameter values.
If a method has N parameters and M of which have default values, M overloads are generated: the first one takes N-1 parameters (all but the last one that takes a default value), the second takes N-2 parameters, and so on.


指示Kotlin编译器为此函数生成替换默认参数值的重载。
如果一个方法有N个参数,其中M个具有默认值,则会生成M个重载:第一个重载使用N-1个参数(除了最后一个具有默认值),第二个重载N-2个参数,依此类推上。

 

通常,如果您使用默认参数值编写Kotlin函数,则该函数在Java中仅作为具有所有参数存在的完整签名可见。如果希望向Java调用者公开多个重载,则可以使用 @JvmOverloads注释。

举例:

class Circle @JvmOverloads constructor(centerX: Int, centerY: Int, radius: Double = 1.0) {
    @JvmOverloads fun draw(label: String, lineWidth: Int = 1, color: String = "red") { /*...*/ }
}

对于具有默认值的每个参数,这将产生一个额外的重载,该重载将删除此参数及其在参数列表中右侧的所有参数。在此示例中,将生成以下内容:

// Constructors:
Circle(int centerX, int centerY, double radius)
Circle(int centerX, int centerY)

// Methods
void draw(String label, int lineWidth, String color) { }
void draw(String label, int lineWidth) { }
void draw(String label) { }

 
* 1.注释还适用于构造函数,静态方法等。它不能用于抽象方法,包括在接口中定义的方法。 

 * 2.如果类具有所有构造函数参数的默认值,则将为其生成一个公共的无参数构造函数。即使@JvmOverloads未指定注释,此方法也有效。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值