Use as anotações @IntDef e @StringDef para poder criar anotações enumeradas de conjuntos de números inteiros e strings para validar outros tipos de referência de código. As anotações Typedef garantem que determinado parâmetro, valor de retorno ou campo referencie um conjunto específico de constantes. Elas também permitem que o preenchimento de código ofereça automaticamente as constantes permitidas. As anotações Typedef usam @interface para declarar o novo tipo de anotação enumerada. As anotações @IntDef e @StringDef, junto com a @Retention, inserem a nova anotação e são necessárias para definir o tipo enumerado. A anotação @Retention(RetentionPolicy.SOURCE) instrui o compilador a não armazenar os dados da anotação enumerada no arquivo .class.
Cada valor em um ENUM é um objeto e cada declaração terá alguma memória de tempo de execução simplesmente para referenciar o objeto. Portanto, os valores de ENUM terão mais memória do que a constante Integer ou String. Me