@JvmOverloads
用于自动重载多个方法
例如:
fun f(a: String, b: Int = 0, c: String="abc"){
}
如果加上该注解
@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)
使用比较多的是Android自定义View中构造方法
class MyLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0)
: FrameLayout(context, attrs, defStyleAttr){
}
在java中等价于:
public class MyLayout extends FrameLayout{
public MyLayout(Context context) {
this(context, null);
}
public MyLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
@JvmStatic
用于让java中调用kotlin的单例中的方法不用写INSTANCE
例如有以下类和方法:
object CommonUtils {
fun printHello() {
println("Hello world!")
}
}
在kotlin和java中调用的代码分别是
//Kotlin
CommonUtils.printHello()
//Java
CommonUtils.INSTANCE.printHello();
如果加上该注解
object CommonUtils {
@JvmStatic
fun printHello() {
println("Hello world!")
}
}
那么在kotlin和java中调用的代码分别是:
//Kotlin
CommonUtils.printHello()
//Java
CommonUtils.printHello();
@CheckResult
返回值必须要处理,否则编译器会报错,代码规范类注解。