android注解的作用?Android官方不推薦使用枚舉,因為使用枚舉占用内存大,相比于靜态常量Enum會花費兩倍以上的内存因此就有另一種方式來替代枚舉類的使用,那就是@IntDef注解,我來為大家科普一下關于android注解的作用?下面希望有你要的答案,我們一起來看看吧!
Android官方不推薦使用枚舉,因為使用枚舉占用内存大,相比于靜态常量Enum會花費兩倍以上的内存。因此就有另一種方式來替代枚舉類的使用,那就是@IntDef注解。
首先談談對枚舉的理解,雖說平時用枚舉不是很多,在某些情況下還是會用到枚舉的。
1、枚舉是某個類的有限集合,它的對象個數不可由程序員增減,它的對象在一個枚舉類生成的時候已經确定。
2、枚舉可以避免程序調用者使用了系統規定之外的變量,造成未知錯誤。比如程序需要使用第三方SDK,傳入了SDK未能處理的變量,造成SDK異常錯誤,如果使用了枚舉,就可在編碼時發現傳入錯誤參數。
添加依賴:
implementation 'com.android.support:support-annotations:26.1.0'
使用示例:
//方式一public class Test { //先定義 常量 public static final int SUNDAY = 0; public static final int MONDAY = 1; public static final int TUESDAY = 2; public static final int WEDNESDAY = 3; public static final int THURSDAY = 4; public static final int FRIDAY = 5; public static final int SATURDAY = 6; //用 @IntDef "包住" 常量; // @Retention 定義策略 // 聲明構造器 @IntDef({SUNDAY, MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY}) @Retention(RetentionPolicy.SOURCE) public @interface WeekDays {} @WeekDays private int currentDay = SUNDAY; public void setCurrentDay(@WeekDays int currentDay) { this.currentDay = currentDay; } @WeekDays public int getCurrentDay() { return currentDay; }} //方式二@IntDef({SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY})@Retention(RetentionPolicy.SOURCE)public @interface WeekDays { int SUNDAY = 0; int MONDAY = 1; int TUESDAY = 2; int WEDNESDAY = 3; int THURSDAY = 4; int FRIDAY = 5; int SATURDAY = 6;}
kotlin中使用@IntDef
在kotlin中使用@IntDef注解,發現沒有什麼用,起不到限定作用,仍然可以随便傳入值,測試代碼如下:
@IntDef( WeekDays.SUNDAY, WeekDays.MONDAY, WeekDays.TUESDAY, WeekDays.WEDNESDAY, WeekDays.THURSDAY, WeekDays.FRIDAY, WeekDays.SATURDAY)@Retention(RetentionPolicy.SOURCE)annotation class WeekDays { companion object { const val SUNDAY = 0 const val MONDAY = 1 const val TUESDAY = 2 const val WEDNESDAY = 3 const val THURSDAY = 4 const val FRIDAY = 5 const val SATURDAY = 6 }} class Test1 { private var currentDay = WeekDays.SUNDAY @WeekDays fun get():Int = currentDay fun setCurrentDay(@WeekDays currentDay: Int){ this.currentDay = currentDay }} fun main(arg:Array<String>){ var test1 = Test1() test1.setCurrentDay(123) println(test1.get())}
最終結果輸出123。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!