Как переопределить метод класса в Java и добавить к нему объявление «throws»? - PullRequest
3 голосов
/ 11 января 2011

Было бы вообще возможно иметь AsyncTask в Android, который "выбрасывает" вещи? Если я не переопределяю метод, он не вызывается. Если я добавлю «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 ]

6 голосов
/ 11 января 2011

Что вам нужно сделать, это обернуть исключение исключением времени выполнения (не проверено) (обычно что-то вроде IllegalArgumentException; или, если ничего не соответствует семантике, просто RuntimeException), и указать проверенное исключение в качестве «основной причины»обычно в качестве аргумента конструктора).

И нет, вы не можете расширить набор проверяемых исключений: это будет противоречить базовым принципам ОО, подобно тому, как вы не можете уменьшить видимость (например, из открытого в закрытое).

3 голосов
/ 11 января 2011

Вы не можете переопределить и выбросить больше исключений;вы можете только оставить подпись как есть или выбросить меньше исключений.

Вы можете выбросить непроверенные исключения;те не меняют сигнатуру метода.

0 голосов
/ 11 января 2011

Вы не можете сделать это. Благодаря Time4Tea я смог добавить методы обратного вызова в класс, которые вызываются при возникновении ошибки. Например:

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

Где onJsonException - метод обратного вызова класса.

0 голосов
/ 11 января 2011

Вы не можете переопределить методы таким способом.

В вашем случае решение состоит в том, чтобы добавить блок try-catch и вернуть false.Также вы можете добавить поле String для своей задачи и заполнить его описанием ошибки.Тогда вы можете использовать его в методе onPostExecute().

...