Почему EOFException не добавляется в этот код (IDE Eclipse)? - PullRequest
0 голосов
/ 02 января 2019

У меня есть следующий код, и Eclipse сообщил в блоке catch, что EOFException никогда не генерируется в блоке try.

Я попытался поместить эти две строки:

String suit = null;
String rank = null;

в блоке try ошибка в блоке catch исчезла.

Я также попытался поместить эти две строки:

char s = suitString2Char(suit);
char r = rankString2Char(rank);

в блок try, ошибка в блоке catch исчезла.

Но когда я помещаю все тело кода в блок try, снова возникает та же ошибка.

public static Card read2(BufferedReader in) throws EOFException {

    Scanner input = new Scanner(in);
    String suit = null;
    String rank = null;

    try {

        int i = 0;
        while (input.hasNext()) {

            suit = i == 0 ? input.next() : suit;
            rank = i == 1 ? input.next() : rank;
            i++;
        }
        input.close();
    } catch (EOFException e) {
        throw new EOFException();
    }   

    char s = suitString2Char(suit);
    char r = rankString2Char(rank);

    if (isValidSuit(s)
            && isValidRank(r)) {

        return new Card(s, r);
    } else {

        return null;
    }
}

1 Ответ

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

Во-первых: Ошибка исчезает, потому что вы создаете код, который не компилируется, когда вы делаете изменения, которые вы предложили.

Во-вторых:

Scanner.next() не вызывает исключение EOFexception.Выдает

@throws NoSuchElementException if no more tokens are available
@throws IllegalStateException if this scanner is closed

, которые RuntimeException с вместо EOFException, который является так называемым "проверенным исключением".

Компилятор обрабатывает их по-разному, когда жалуется на ошибки.

Проверенные исключения должны быть объявлены в предложении метода или конструктора throws, если они могут быть выброшены при выполнении метода иликонструктор и распространяется за пределы метода или конструктора.

RuntimeException и его подклассы являются непроверенными исключениями.Непроверенные исключения не нужно объявлять в предложении метода или конструктора throws, если они могут быть выброшены при выполнении метода или конструктора и распространяться за пределы метода или конструктора.

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