簡體   English   中英

如何在Java中覆蓋類方法並向其添加“throws”聲明?

[英]How do I override a class method in Java and add a “throws” declaration to it?

難道在Android中有一個“拋出”東西的AsyncTask嗎? 如果我不@Override方法,它不會被調用。 如果我在末尾添加“throws”,則會出現編譯器錯誤。 例如,我想做類似的事情:

class testThrows extends AsyncTask<String,Void,JSONObject> {
   @Override
   protected JSONTokener doInBackground(<String>... arguments) throws JSONException {
      String jsonString = arguments[0];
      JSONTokener json = new JSONTokener(jsonString);
      JSONObject object = json.getJSONObject("test");
      return object;
   }
}

json.getJSONObject拋出JSONException。 有沒有辦法做到這一點?

您需要做的是使用運行時(未檢查)異常(通常類似於IllegalArgumentException ;或者如果沒有匹配語義,普通RuntimeException )來包裝異常,並將已檢查的異常指定為“根本原因”(通常作為構造函數參數)。

不,你不能擴大一組檢查異常:這將違反基本的OO原則,類似於你不能降低可見性(例如從公共到私有)。

你無法覆蓋並拋出更多異常; 您只能保留簽名或減少異常。

您可以拋出未經檢查的異常; 那些不改變方法簽名。

你不可以做這個。 感謝Time4Tea,我能夠在出現錯誤時調用的類中添加回調方法。 例如:

try {
   JSONTokener json = new JSONTokener(stringToJsonify);
   JSONObject object = json.getJSONObject("test");
} catch (JSONException e){
   onJsonException();
}

其中onJsonException是類回調方法。

您不能以這種方式覆蓋方法。

在您的情況下,解決方案是添加try-catch塊並返回false。 您還可以添加一個String字段來填充您的任務,並填寫錯誤說明。 然后你可以在onPostExecute()方法中使用它。

暫無
暫無

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

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