簡體   English   中英

支持注釋@StringDef,@ IntDef聲明標准?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM