android Annotion

android Annotion

在看書過程中發現瞭註解,註解對我們寫代碼是非常有用的,我自己想到瞭註解會不會影響程序的性能?主要分為三部分說一下我的疑問,首先僅僅保留在源碼裡面的註解肯定不會影響程序的性能,僅僅我們在ide中code時ide會幹更多的工作;其次編譯進入class文件的註解,在我看來會影響性能的,因為這部分註解不會進入虛擬機,那麼虛擬機在加載的過程中會把這部分內容從class中剔除出去會產生工作量;最後RUNTIME的註解也會產生虛擬機的工作量。但是我在上網過程中沒有找到合適的答案,如果您瞭解請回復我


註解的作用
    1.可以生成javadoc文檔 , @param @return
    2.減少重復性代碼 比如findViewById
    3.在編譯時會檢查格式限制瞭參數的范圍
    4.有助於理解代碼,每個參數的類型都很明顯

1.android註解

1.1 Nullness註解

 @Nullable 標記參數或者返回值可以為空
 @NotNull  作用於參數或者返回值不可以為空

1.2 資源註解

在android中資源是整形表示的,保存在R.java中這意味著如果需要一個Layout類型的參數如果傳入瞭Color類型在編譯是不會報錯的,隻有在運行時才會發現錯誤,下面列出一部分,這些註解都可以在參數和返回值中使用

@ColorRes  
@DrawableRes
@IdRes
@LayoutRes
@MenuRes
@StringRes
@StyleRes
...

1.3 類型定義註解

@IntDef 可以完成枚舉的功能

    public static final int ONE = 1;
    public static final int TWO = 2;
    public static final int THREE = 3;
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({ONE , TWO ,THREE})
    public @interface MODE{}
    public static void setMODE(@MODE int mode) {
    }
    /**這個時候使用setMODE方法的參數隻能是ONE TWO THREE 中一個*/

1.4 線程註解

@UiThread 標記運行在UI線程
@MainThread 標記運行在主線程
@WorkerThread 標記運行在後臺線程
@BinderThread 標記運行在Binder線程

1.5 值范圍註解

@Size(min=1) 標記集合不可以為空
@Size(max=23) 標記集合或者字符串最大成員數量是23
@IntRanger 標記參數的范圍
public void setAlpha(@IntRange(from=0,to=255) int alpha){}

1.6 權限註解

@RequirePermission 標記函數需要一個權限
@Keep 標記混淆規則不需要混淆的類或方法

2 java中註解

@interface 聲明一個實際的java接口
@Override  編譯器會檢查倍註解的方法是否真的重載瞭一個父類的方法
@Deprecated 標記一個被拋棄或者不建議使用的方法 ,如果使用這個方法會有一條橫線
@SuppressWarnings 抑制某種類型的警告
@Generated 一般使用代碼生成工具使用,不建議手動修改修飾的類或者方法
@Retention 用來指明註解的范圍,就是在什麼級別下保留註解
    @Retention(RetentionPolicy.SOURCE) 生成的註解僅僅保留在.java源碼,編譯後會丟棄註解
    @Retention(RetentionPolicy.CLASS) 生成的註解會保存在編譯後的class文件裡,但是不會進入虛擬機
    @Retention(RetentionPolicy.RUNTIME) 在虛擬機運行期間也保存註解

You May Also Like