Пользовательские непроверенные исключения

Ладно, ребята, я пытался выяснить это за последний день или около того. В моем домашнем задании я создаю и непроверенные, и проверенные исключения. Проверенные исключения, которые, как мне кажется, я получаю, в основном должны быть обработаны перед компиляцией (с помощью try & catch или выбрасыванием следующего объекта, который его вызывает. Для непроверенных исключений я не понимаю, как работают пользовательские. Они перехватываются во время выполнения и не работают. не обязательно нужно бросать или заключать в оболочку с помощью try & catch, но если они настроены, как IDE или что-то еще знает, что искать? Пример: один из моих пользовательских непроверенных файлов должен срабатывать, если пользователь добавляет покемона, но вечеринка заполнена, но как мне сообщить IDE, что это то, что должно произойти? Мой файл исключения выглядит так:

public class PartyIsFullException extends RuntimeException {

    public PartyIsFullException() {
        super();
    }

    public PartyIsFullException(String message) {
        super(message);
    }
}

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

public void addToParty(String name) throws PartyIsFullException {
        boolean exists = false;
        for (int i = 0; i < 152; i++) {
            exists = (name.equals(pokedex[i]));
        }
        if (exists) {
            throw new PokemonAlreadyExistsException();
        } else {
            if (partyPos < 6) {
            party[partyPos] = name;
            partyPos++;
            } else {
                throw new PartyIsFullException();
            }
        }
    }

2 ответа

Решение

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

Вы можете бросить их!

В реальном проекте это должно быть четко задокументировано.

/*
 * @throws PartyIsFullException if isPartyFull() would return true
 */
public void addToParty(String name) throws PartyIsFullException {...}

Обычно непроверенное исключение используется для ситуации, когда клиент метода сам избегает исключительного условия, например:

if(theParty.isPartyFull()) {
    // tell the user the party is full
    // and they can't add more Pokemon
} else {
    theParty.addToParty(thePokemon);
}

И поэтому им не нужно явно ловить это, потому что они уже справляются с этим обстоятельством.

Если исключение выдается и нет try-catch снаружи он будет выбрасываться до конца, чтобы завершить поток. (Для небольшой программы с просто main, это означает, что программа вылетает.)

Хотя вы не знаете, может ли определенное пользовательское непроверенное исключение вызываться или не вызываться определенным методом, вы все равно можете его перехватить (или это суперкласс Exception). Наличие пользовательского исключения на основе Java может добавить некоторые полезные детали, характерные для вашего исключительного случая (т. Е. Имя исключения должно быть осмысленным, чтобы было легче читать ваши журналы).

Создание пользовательских (непроверенных) исключений и их содержимого также может быть настроено в соответствии с вашими потребностями. Например PartyIsFullException конструктор может взять Party Объект и форматировать его состояние в строку.

Если вам не нужно облегчать создание / презентацию непроверенного исключения, все в порядке с RuntimeException при условии, что вы предоставляете описательное сообщение.

Другие вопросы по тегам