在特殊情况下如何禁用Android @IntDef注释检查?

时间:2014-12-14 21:09:40

标签: android casting annotations android-support-library suppress

一个这样的情况是从Bundle读取一个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.State int,以便在最后一行设置变量。

另一种情况是编写一个负面测试,调用带有注释参数的函数故意传递错误的参数,以便测试在这种情况下抛出异常。必须有一种方法来抑制注释检查,以便编译这样的测试。

2 个答案:

答案 0 :(得分:52)

我找到了抑制注释检查的方法。实际上,有三个:

  1. 在课程定义之前添加@SuppressWarnings("ResourceType")。就我而言:

    @SuppressWarnings("ResourceType")
    public class MainActivity extends ActionBarActivity {
        ...
    }
    
  2. 在方法定义之前添加@SuppressWarnings("ResourceType")。就我而言:

    @Override
    @SuppressWarnings("ResourceType")
    protected void onCreate(Bundle savedInstanceState) {
        ...
    }
    
  3. 这两种方法对我不起作用,因为除了一个语句之外,我想要对所有代码进行注释检查。

    1. 要抑制对单行的检查,请添加特殊格式的注释(!!!)。

      //noinspection ResourceType
      fState = savedInstanceState.getInt(BUNDLE_STATE);
      

答案 1 :(得分:5)

public void UpdateView()
{
    // do whatever you need here to update the page
}
相关问题