isInstance () для того же класса возвращает false во время обработки исключений - PullRequest
0 голосов
/ 20 января 2019

Я новичок в Java и пытался реализовать isInstance () в конкретном сценарии обработки исключений.

try {

       ....
       ..//some condition
          throws MyException(); //  --> MyException extends RuntimeException

}catch(Exception e){
       if(e.getClass().isInstance(MyException.class))  // --> This returns false
                .. //do something
}

Вышеприведенный isInstance () возвращает false.Когда я отлаживаю, e.getClass () имеет значение :

in.soumav.exceptions.MyException (id = 133)

и MyException.class имеет значение:

in.soumav.exceptions.MyException (id = 133)

Какая концепция у меня отсутствует?

Ответы [ 2 ]

0 голосов
/ 20 января 2019

MyException.class является экземпляром Class, а не MyException, поэтому

MyException.class.isInstance(e)

должно это сделать, но ваша цель должна обрабатываться следующим образом:

try {

      ....
      ..//some condition
         throws MyException(); //  --> MyException extends RuntimeException

}catch(MyException e){
    ... //do something
}catch(Exception e){
    ...
}
0 голосов
/ 20 января 2019

Вы получили это задом наперед.

Это должно быть:

if (MyException.class.isInstance(e))

Javadoc:

логический java.lang.Class.isInstance(Object obj)

Определяет, совместим ли указанный Объект с назначением для объекта, представленного этим классом.

Итак, если вы хотите проверить, является ли экземпляр исключенияссылка e совместима с присваиванием класса MyException, в качестве аргумента MyException.class.isInstance() следует передать e.

В качестве альтернативы вы можете использовать isAssignableFrom:

if (e.getClass().isAssignableFrom(MyException.class))
...