如何在Java中覆盖类方法并向其添加“throws”声明?

时间:2011-01-11 18:05:00

标签: java android override

在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。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:6)

您需要做的是使用运行时(未检查)异常(通常类似于IllegalArgumentException;或者如果没有匹配语义,普通RuntimeException)来包装异常,并将已检查的异常指定为“根本原因“(通常作为构造函数参数)。

不,你不能扩大已检查的异常集:这将违反基本的OO原则,类似于你不能降低可见性(例如从公共到私有)。

答案 1 :(得分:3)

你无法覆盖并抛出更多异常;你只能按原样保留签名或减少异常。

你可以抛出未经检查的异常;那些不会改变方法签名。

答案 2 :(得分:0)

你不能这样做。感谢Time4Tea,我能够在出现错误时调用的类中添加回调方法。例如:

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

其中onJsonException是类回调方法。

答案 3 :(得分:-1)

你不能以这种方式覆盖方法。

在您的情况下,解决方案是添加try-catch块并返回false。您还可以添加一个String字段来填充您的任务,并填写错误说明。然后,您可以在onPostExecute()方法中使用它。