[英]Android Support Annotations - How to use IntDef/StringDef (Typedef Annotations) with generics list?
[英]Support Annotation @StringDef, @IntDef declaration standards?
@ StringDef,@ IntDef等使得使用枚舉的生活更簡單,更好。 通常我們看到這些定義如下:
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
@Retention(RetentionPolicy.SOURCE)
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;
....
如果要在注釋本身內部定義這些,是否會有任何問題。 例如:
@IntDef({NavigationMode.NAVIGATION_MODE_STANDARD, NavigationMode.NAVIGATION_MODE_LIST, NavigationMode.NAVIGATION_MODE_TABS})
@Retention(RetentionPolicy.SOURCE)
public @interface NavigationMode {
int NAVIGATION_MODE_STANDARD = 0;
int NAVIGATION_MODE_LIST = 1;
int NAVIGATION_MODE_TABS = 2;
}
....
當這些def注釋被單獨定義以便可以跨模塊使用時,這會派上用場。
我臭名昭着地使用@IntDef
。 它非常棒,特別是因為Android Studio 2.0可以正確使用這個注釋和switch
語句。
我通常使用這種模式:
public static final class NavigationMode {
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
@Retention(RetentionPolicy.SOURCE)
public @interface Value {
}
public static final int NAVIGATION_MODE_STANDARD = 0;
public static final int NAVIGATION_MODE_LIST = 1;
public static final int NAVIGATION_MODE_TABS = 2;
// Suppress default constructor for noninstantiability
private NavigationMode() {
throw new AssertionError();
}
}
然后我可以通過NavigationMode.NAVIGATION_MODE_STANDARD
引用該值,注釋是@NavigationMode.Value
其中有一個更簡單的@IntDef
定義(沒有NavigationMode.
前綴)。
但我必須說......我非常喜歡你的第二種方法!
@IntDef({NavigationMode.NAVIGATION_MODE_STANDARD, NavigationMode.NAVIGATION_MODE_LIST, NavigationMode.NAVIGATION_MODE_TABS})
@Retention(RetentionPolicy.SOURCE)
public @interface NavigationMode {
int NAVIGATION_MODE_STANDARD = 0;
int NAVIGATION_MODE_LIST = 1;
int NAVIGATION_MODE_TABS = 2;
}
我甚至可以切換到它。 雖然我不是Android Studio為其着色的方式的忠實粉絲:
我不認為這種方式定義的值應該存在任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.