Un tale caso sta leggendo un int da un pacchetto e la memorizzazione nella variabile limitato da @IndDef nota:Come disabilitare i controlli annotazione Android @IntDef in casi particolari?
public class MainActivity extends ActionBarActivity {
@IntDef({STATE_IDLE, STATE_PLAYING, STATE_RECORDING})
@Retention(RetentionPolicy.SOURCE)
public @interface State {}
public static final int STATE_IDLE = 0;
public static final int STATE_PLAYING = 1;
public static final int STATE_RECORDING = 2;
@MainActivity.State int fPlayerState = STATE_IDLE;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null)
fPlayerState = savedInstanceState.getInt(BUNDLE_STATE); //Causes "Must be one of: ..." error
ci deve essere un modo di sopprimere il controllo o la fusione da int @ MainActivity.State int per impostare la variabile nell'ultima riga.
L'altro caso è scrivere un test negativo che chiama una funzione con parametro annotato che passa intenzionalmente il parametro errato per verificare che l'eccezione sia lanciata in tal caso. Ci deve essere un modo per sopprimere il controllo delle annotazioni per compilare tale test.
Non sarebbe un tipo modo sicuro per ottenere un '@ IntDef' indietro di un fascio essere quello di fare un interruttore su di esso e assegnare il risultato finale sulla base dei valori? per esempio. "' state = getInt(); switch (stato) case 1: fState = STATE_IDLE ... '" Il lato negativo è che sposta la verifica dal tempo di compilazione al tempo di esecuzione, che era il punto intero di '@ IntDef' iniziare con. (Anche il risultato non è particolarmente gestibile se si aggiungono frequentemente dei valori.) Si potrebbe anche fare una tabella di ricerca secondaria per simulare il risultato di "Enum.values ()". – lilbyrdie