Написание совместимого с форвардом кода, когда API вводит новый тип исключения - PullRequest
0 голосов
/ 31 января 2019

Одна проблема, которую я заметил при переносе кода отражения из Java 8 в Java 9+, заключается в том, что setAccessible() теперь выбрасывает InaccessibleObjectException в дополнение к SecurityException, когда раньше в Java 8 InaccessibleObjectException не был типом исключения.

Каков принятый способ написания кода, который должен перехватывать и обрабатывать исключение, о котором он не может знать, поскольку он находится в будущей версии Java, но все еще совместим с текущейверсия?(В этом случае единственный класс предков - RuntimeException, но мне лично кажется, что я пишу такой всеобъемлющий текст catch.)

1 Ответ

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

Вы можете запросить среду выполнения для версии Java (как описано в в этом посте ) и использовать exception.getClass().getName(), чтобы получить имя класса исключения обратно совместимым способом

В другихслова

  try {
    method.setAccessible();
  } catch (RuntimeException e) {
    String version = (System.getProperty("java.version"))
    String minorVersion = ver.split("\\.")[1];
    if (minorVersion >=9) {
      if (e.getClass().getName().equals("java.lang.reflect.InaccessibleObjectException")) {
        // Handle java 9 reflection access issue
      } else {
        // Handle java 8 runtime exception
    }
  }





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