Android @Intdef для флагов, как использовать его

Я не понимаю, как использовать @Intdef при создании этого флага:

@IntDef(
  flag = true
  value = {NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})

этот пример прямо из docs. Что это значит? означает ли это, что все из них первоначально установлены в true? если я делаю "или" на следующем:

NAVIGATION_MODE_STANDARD | NAVIGATION_MODE_LIST

что это значит... им немного смущает то, что происходит здесь.

Ответ 1

Используя для атрибута IntDef # flag() значение true, можно объединить несколько констант.

Пользователи могут комбинировать разрешенные константы с флагом (например, |, & amp;, ^).

Например:

public static final int DISPLAY_OP_1 = 1;
public static final int DISPLAY_OP_2 = 1<<1;
public static final int DISPLAY_OP_3 = 1<<2;

@IntDef (
    flag=true,
    value={
            DISPLAY_OP_1,
            DISPLAY_OP_2,
            DISPLAY_OP_3
    }
)

@Retention(RetentionPolicy.SOURCE)
public @interface DisplayOptions{}

public void setIntDefFlag(@DisplayOptions int ops) {
    ...
}

и используйте setIntDefFalg() с '|'

setIntDefFlag(DisplayOptions.DISPLAY_OP1|DisplayOptions.DISPLAY_OP2);