枚举(Eeum)的缺点
每一个枚举值都是一个对象,在使用它时会增加额外的内存消耗,所以枚举相比与 Integer 和 String 会占用更多的内存。
较多的使用 Enum 会增加 DEX 文件的大小,会造成运行时更多的开销,使我们的应用需要更多的空间。
使用@IntDef代替枚举
public class IntDefClass {
IntDefClass(){}
private static final int one = 1;
private static final int two = 2;
// @IntDef({one,two}) 和下边的作用相同
@IntDef({1,2})
@Retention(RetentionPolicy.CLASS)
public @interface status{ }
//在类中使用@IntDef定义过的注解
public void setData(@status int param){
}
}
public class IntDefActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_int_def);
initData();
}
private void initData() {
IntDefClass intDefClass = new IntDefClass();
intDefClass.setData(2);//作用在这里
}
}
在调用setData
时,会提示可入传的值,如果不是规定的值,也会提示错误,如下图
注解的生命周期分为:
- 1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
- 2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
- 3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
参考:https://www.cnblogs.com/a8457013/p/9965551.html
https://www.jianshu.com/p/c5267d1f9a52