Как избавиться от предупреждений / ошибок IntelliJ при обнаружении исключения IOException блока try / catch? - PullRequest
0 голосов
/ 17 февраля 2019

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

По сути, у меня есть блок try / catch, где я получаю предупреждение или ошибку независимо от того, что я делаю.catch(IOException e) приводит к «слишком широкому» предупреждению.catch (FileNotFoundException e) приводит к ошибкам из кода, который требует перехвата IOException.catch (FileNotFoundException | IOException e) приводит к ошибке «типы в multi-catch должны быть непересекающимися».Наконец, размещение двух блоков catch (по одному на каждое исключение) приводит к появлению ветви «catch», идентичной предупреждению «FileNotFoundException».

Я не хочу редактировать систему предупреждений IntelliJ, поскольку это полезно.

Как заставить блок try / catch ниже работать без предупреждений или ошибок?

@Override
public void readFile(File inFile) {

try {
    FileReader fr = new FileReader(inFile);
    BufferedReader br = new BufferedReader(fr);

    // get the line with the sizes of the puzzle on it
    String sizes = br.readLine();

    // find the height of the puzzle
    int height = Character.getNumericValue(sizes.charAt(0));

    // create a puzzleArr with a height
    this.puzzleArr = new char[height][];

    // create the char[] array of the puzzle itself
    int ct = 0;
    String puzzleLine;

    // add the puzzle to puzzleArr
    while (ct < this.puzzleArr.length) {

        puzzleLine = br.readLine().replaceAll("[^a-z]", "");
        this.puzzleArr[ct++] = puzzleLine.toCharArray();
    }

    // create the LinkedList<char[]> of words to find in the puzzle
    String line = br.readLine();
    while (line != null) {

        line = line.toLowerCase().replaceAll("[^a-z]", "");
        this.wordList.add(line.toCharArray());

        line = br.readLine();
    }

    br.close();

} catch (FileNotFoundException e) {

    e.printStackTrace();
}
}

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Соответствующий контроль можно найти по адресу Settings > Editor > Inspections > Java > Error Handling > Overly broad 'catch' block.Я хотел бы отметить, что эта проверка не была включена по умолчанию для меня.

Существует несколько способов «исправить» предупреждение.

Использование Multi-Catch

@Override
public void readFile(File file) {

    try {
        ...
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

}

Изменить проверку

Вероятно, это предпочтительный вариант, особенно если вы хотите избежать полного отключения проверки.Из описания проверки:

Отчеты catch блоков, которые имеют параметры, которые являются более общими, чем исключения, выдаваемые соответствующим try блоком.

Используйте первый флажок ниже, чтобы этот осмотр предупреждал только о самых общих исключениях.

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

Последний абзац - это то, что нас интересует.

enter image description here

0 голосов
/ 17 февраля 2019

Попробуйте catch (Exception e){} это должно работать

...