Kotlin 常用注解

917 阅读1分钟

##@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

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