Я пытаюсь реализовать аннотацию @IntDef
в разработке Android.
Первый метод: он отлично выглядит с определением, разделенным в классе Constant.java
:
public class Constant {
@IntDef(value={SORT_PRICE, SORT_TIME, SORT_DURATION})
@Retention(RetentionPolicy.SOURCE)
public @interface SortType{}
public static final int SORT_PRICE = 0;
public static final int SORT_TIME = 1;
public static final int SORT_DURATION = 2;
}
Использование:
@Constant.SortType int sortType = Constant.SORT_PRICE;
Но все становится намного более грязным, когда в одном файле есть несколько определений (например, UserType, StoreType и т.д.).
Второй метод: Итак, я придумал что-то вроде этого, чтобы отделить значения между определением:
public class Constant {
@IntDef(value={SortType.SORT_PRICE, SortType.SORT_TIME, SortType.SORT_DURATION})
@Retention(RetentionPolicy.SOURCE)
public @interface SortTypeDef{}
public static class SortType{
public static final int PRICE = 0;
public static final int TIME = 1;
public static final int DURATION = 2;
}
}
Использование:
@Constant.SortTypeDef int sortType = Constant.SortType.PRICE;
Но, как вы можете видеть, я создал для него два разных имени: SortTypeDef
и SortType
Третий метод: Я попытался переместить список возможных значений внутри @interface
:
public class Constant {
@IntDef(value={SortType.SORT_PRICE, SortType.SORT_TIME, SortType.SORT_DURATION})
@Retention(RetentionPolicy.SOURCE)
public @interface SortType{
int PRICE = 0;
int TIME = 1;
int DURATION = 2;
}
}
Использование
@Constant.SortType int sortType = Constant.SortType.PRICE;
Пока он работает, я не знаю, каков недостаток.
Можно ли положить возможные значения @IntDef
внутри @interface
? Существуют ли различия в производительности по трем описанным выше методам?