Kotlin 常用注解

2020-04-08  本文已影响0人  MaybeSix

@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

返回值必须要处理,否则编译器会报错,代码规范类注解。

上一篇下一篇

猜你喜欢

热点阅读