kotlin注解
2021-06-23 本文已影响0人
wayne777
@JvmField
指示Kotlin编译器不为该属性生成getter/setter,并将其作为字段公开。
如果用来修饰val变量,就和const关键字的功能一样了(类似于java:public static final)。
var a: String = ""
编译后:
@NotNull
private static String a = "";
@NotNull
public static final String getA() {
return a;
}
public static final void setA(@NotNull String var0) {
Intrinsics.checkParameterIsNotNull(var0, "<set-?>");
a = var0;
}
---------------------------------------------------------
@JvmField
var a: String = ""
编译后:
@JvmField
@NotNull
public static String a = "";
@JvmField
val a: String = ""
编译后:
@JvmField
@NotNull
public static final String a = "";
@JvmOverloads
指示Kotlin编译器为包含默认参数值的函数生成重载。
例1:简化自定义view的构造函数
class EmptyView : LinearLayout{
@JvmOverloads
constructor (context: Context, attrs: AttributeSet? =null,defStyle: Int =0) :
LinearLayout(context, attrs, defStyle) {
}
}
编译后:
public class EmptyView extends LinearLayout {
public EmptyView(Context context) {
this(context, null);
}
public EmptyView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public EmptyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
例2:
@JvmOverloads
fun a(str:String,i:Int=0){}
编译后:
void a(String str){
a(str,0)
}
void a(String a ,int i){
}
@JvmStatic
指定从该元素中生成静态方法需要。注意:此注解只能用于被object关键字修饰的类的方法,或者companion object (或Companion代指)中的方法
object A {
@JvmStatic fun a() {}
}
class A {
companion object {
@JvmStatic fun a() {}
}
}
@JvmSynthetic
用来注解方法和字段,使得被标记的元素只能在kotlin代码中使用,在java代码中无法使用。
@JvmSuppressWildcards
用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符