簡體   English   中英

在特殊情況下如何禁用Android @IntDef注釋檢查?

[英]How do I disable Android @IntDef annotation checks in special cases?

其中一種情況是從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,以便在最后一行設置變量。

另一種情況是編寫一個負面測試,調用帶有注釋參數的函數故意傳遞錯誤的參數,以便測試在這種情況下拋出異常。 必須有一種方法來抑制注釋檢查以編譯這樣的測試。

我找到了抑制注釋檢查的方法。 實際上,有三個:

  1. 在類的定義之前添加@SuppressWarnings("ResourceType") 就我而言:

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

     @Override @SuppressWarnings("ResourceType") protected void onCreate(Bundle savedInstanceState) { ... } 

這兩種方法對我不起作用,因為我希望對所有代碼進行注釋檢查,除了一個語句。

  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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM