原文地址:http://tools.android.com/tech-docs/support-annotations
Android Support Library從19.1版本開始引入了一個新的註解庫,其中包括了很多有用的元註解,可以用來修飾代碼並且幫助發現bug。Support Library本身也使用了這些註解,當使用Support Library庫的時候,Android Studio實際上已經在基於這些註解來檢查代碼中的潛在問題了。
使用註解庫
dependencies {
compile 'com.android.support:support-annotations:20.0.0'
}
Nullness註解
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
...
/**
* Add support for inflating the <fragment> tag.
*/
@Nullable
@Override
public View onCreateView(String name, @NonNull Context context, @NonNull AttributeSet attrs) {
...
Resource Type Annotations(資源類型註解)
import android.support.annotation.StringRes;
...
public abstract void setTitle(@StringRes int resId);
IntDef/StringDef: Magic Constant Annotations(常量註解)
import android.support.annotation.IntDef;
...
public abstract class ActionBar {
...
@Retention(RetentionPolicy.SOURCE)
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
public @interface NavigationMode {}
public static final int NAVIGATION_MODE_STANDARD = 0;
public static final int NAVIGATION_MODE_LIST = 1;
public static final int NAVIGATION_MODE_TABS = 2;
@NavigationMode
public abstract int getNavigationMode();
public abstract void setNavigationMode(@NavigationMode int mode);
以上例子中創建了一個新的註解(public @interface NavigationMode)然後我們對這個註解使用了元註解@IntDef,然後列出了所有可能的值(NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS),然後我們再用這個註解修飾了一個方法(getNavigationMode()),於是這個方法的返回值就被限定爲NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS這三個枚舉值中的一個了。
@IntDef(flag=true, value={
DISPLAY_USE_LOGO,
DISPLAY_SHOW_HOME,
DISPLAY_HOME_AS_UP,
DISPLAY_SHOW_TITLE,
DISPLAY_SHOW_CUSTOM
})
@Retention(RetentionPolicy.SOURCE)
public @interface DisplayOptions {}
於是被@DisplayOptions註解修飾的變量可以接受@InfDef列出的值或者這些值相互位運算的結果,例如DISPLAY_USE_LOGO | DISPLAY_SHOW_HOME。