Локальная переменная не назначается до использования с исключениями - PullRequest
1 голос
/ 13 июля 2020

Меня удивляет, что если я удалю первое назначение, я получаю ошибку компиляции. Код следующий:

public void antlr(String fullyQualifiedFilename) {
    String path = null;
    try {
      path = new File(fullyQualifiedFilename).getParent();
      if (path != null) {
        path = new File(path).getCanonicalPath();
      }
    } catch (IOException ioe) {
      //...
    }
    if (path != null) {
      int f;
    }
  }

, и я хочу удалить инициализацию переменной и оставить только объявление. В самом деле:

public void antlr(String fullyQualifiedFilename) {
    String path;
    try {
      path = new File(fullyQualifiedFilename).getParent();
      if (path != null) {
        path = new File(path).getCanonicalPath();
      }
    } catch (IOException ioe) {
      //...
    }
    if (path != null) {
      int f;
    }
  }

Я получаю следующую ошибку: Example.java:19,9: error: Local variable path is not assigned before used Имеет смысл ожидать, что первый конструктор File выдает только непроверенное исключение NullPointerException и getParent() не вызывает никаких проверенных исключения. Итак, первое присваивание всегда вычисляет ожидаемое, если выбрасывается непроверенное исключение. Я имею в виду, что у компилятора есть вся необходимая информация, чтобы знать, что первое присваивание path = new File(fullyQualifiedFilename).getParent() всегда выполняется.

это Это то, чем я думаю должна быть диаграмма потока управления.

Я ошибаюсь? Я что-то упускаю?

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