[英]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.