Jeden taki przypadek czyta int z wiązki i przechowywanie go w zmiennej zastrzeżonej przez @IndDef adnotacji:Jak wyłączyć sprawdzanie adnotacji Android @IntDef w szczególnych przypadkach?
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
Musi być jakiś sposób tłumienia czek lub odlewanie z int do @ MainActivity.State int w celu ustawienia zmiennej w ostatnim wierszu.
Innym przypadkiem jest napisanie negatywnego testu, który wywołuje funkcję z adnotowanym parametrem celowo przekazującym nieprawidłowy parametr w celu sprawdzenia, czy wyjątek został zgłoszony w takim przypadku. Musi istnieć sposób na powstrzymanie sprawdzania adnotacji w celu skompilowania takiego testu.
Would not typu bezpieczny sposób, aby uzyskać '@ IntDef' wycofać się z wiązki będzie zrobić przełącznik na nim i przypisać wynik końcowy opartą na wartościach? na przykład "state = getInt(); switch (stan) case 1: fState = STATE_IDLE ..." "Wadą jest to, że przenosi weryfikację z czasu kompilacji na czas wykonywania, który był całym punktem' @ IntDef' najpierw. (Rezultat nie jest szczególnie łatwy w utrzymaniu, jeśli często dodajesz wartości.) Możesz również wykonać drugorzędną tabelę odnośników, aby naśladować wynik "Enum.values ()". – lilbyrdie