перебрасывание подкласса RuntimeException - PullRequest
1 голос
/ 12 октября 2011

Я создаю общий класс, который принимает в качестве параметра список исключений, которые он готов обработать.

public class MyClass {
  public MyClass (List<Class<? extends RuntimeException>> exceptions) ...
  public execute() {
    try {
      justObj.call()
    } catch(RuntimeException e) {
      if exceptions.contains(e.getClass()) {...}
      else {throw e;}
    }

Я хочу, чтобы выброшенное исключение было исходным, которое я перехватил, например если это было NullPointerException, тогда я хочу, чтобы бросок был NullPointerException, а не RuntimeException, как сейчас.

Есть идеи, как этого добиться?

Ответы [ 3 ]

3 голосов
/ 12 октября 2011

Когда вы ловите RuntimeException (или любой подкласс), он не меняет тип объекта / исключения.Если это NullPointerException, он все равно будет объектом этого типа, когда вы снова его выбросите (как у вас в коде)

1 голос
/ 12 октября 2011

Уже работает:

public static void main(String[] args) {
    try {
            ((ArrayList) null).get(0);
    } catch (RuntimeException e) {
        throw e;
    }
}

кидает:

Exception in thread "main" java.lang.NullPointerException
    at Test.main(Test.java:96)
0 голосов
/ 12 октября 2011

Это будет - RuntimeException - это просто ссылка на исходный объект, который будет любым подклассом RuntimeException, который был изначально выдан (например, NullPointerException).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...