そのようなケースの1つは、バンドルからintを読み取り、それを@IndDefアノテーションによって制限された変数に格納することです。
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
最後の行に変数を設定するには、チェックを抑制したり、intから@ MainActivity.Stateintにキャストしたりする方法が必要です。
もう1つのケースは、そのような場合に例外がスローされることをテストするために、意図的に間違ったパラメーターを渡す注釈付きパラメーターを持つ関数を呼び出すネガティブテストを作成することです。このようなテストをコンパイルするには、アノテーションチェックを抑制する方法が必要です。
注釈チェックを抑制する方法を見つけました。実際には、3つあります。
クラスの定義の前に@SuppressWarnings("ResourceType")
を追加します。私の場合:
_@SuppressWarnings("ResourceType")
public class MainActivity extends ActionBarActivity {
...
}
_
メソッドの定義の前に@SuppressWarnings("ResourceType")
を追加します。私の場合:
_@Override
@SuppressWarnings("ResourceType")
protected void onCreate(Bundle savedInstanceState) {
...
}
_
1つのステートメントだけを除いて、すべてのコードで注釈チェックが必要なため、これら2つのアプローチは機能しません。
1行のチェックを抑制するには、特別にフォーマットされたコメント(!!!)を追加します。
_//noinspection ResourceType
fState = savedInstanceState.getInt(BUNDLE_STATE);
_
@Status int state1=bundle.getInt(STATE_ELEMENT1);
setStatus1(state1);
//instead of direct setStatus1(bundle.getInt(STATE_ELEMENT1);