android軟件安全權威指南:android註解的作用

Android官方不推薦使用枚舉,因為使用枚舉佔用內存大,相比於靜態常量Enum會花費兩倍以上的內存。因此就有另一種方式來替代枚舉類的使用,那就是@IntDef註解。

枚舉的理解

首先談談對枚舉的理解,雖說平時用枚舉不是很多,在某些情況下還是會用到枚舉的。

1、枚舉是某個類的有限集合,它的對象個數不可由程序員增減,它的對象在一個枚舉類生成的時候已經確定。

2、枚舉可以避免程序調用者使用了系統規定之外的變量,造成未知錯誤。比如程序需要使用第三方SDK,傳入了SDK未能處理的變量,造成SDK異常錯誤,如果使用了枚舉,就可在編碼時發現傳入錯誤參數。

@IntDef註解的使用

添加依賴:

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。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/225359.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:44
下一篇 2024-12-09 14:44

相關推薦

發表回復

登錄後才能評論