Соответствующее исключение при сбое instanceof - PullRequest
0 голосов
/ 03 октября 2018

Что является подходящим исключением при сбое instanceof.Примерно так:

if (user instanceof CustomerModel)
    {
            some logic...
    }
    else
    {
        throw new ClassCastException("Current user is not of type Customer");
    }
}

Я работал с ClassCastException, но я не уверен на 100%, что он хорош в этой ситуации.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Как сказал Эран, если вы просто хотите получить «промышленный стандарт» ClassCastException, просто попытайтесь разыграть его и не используйте instanceof.Если вы хотите, чтобы пользовательское исключение, ну, это зависит от того, что вы собираетесь.Нам нужно больше информации о том, что вы хотите, чтобы привести лучший пример.Я просто приведу случайный пример.

Например, если вы намереваетесь проверить и привести параметр метода или выполнить ошибку с пользовательским сообщением об ошибке, я обычно использую этот метод:

public static <T, S extends T> S requireType(Class<S> type, T actual, String varName) {
    requireNonNull(actual, varName);
    if (!type.isInstance(actual))
        throw new IllegalArgumentException('\'' + varName + "' must be of type " +
                                           type.getName() +": " + actual.getClass());
    //noinspection unchecked // It is just checked
    return (S)actual;
}

Тестрашные общие параметры обрабатываются автоматически, например:

FirmwarePacket castPacket = requireType(FirmwarePacket.class, packet, "packet");
0 голосов
/ 03 октября 2018

Если это задано в качестве параметра, я бы использовал:

IllegalArgumentException :

Брошенный, чтобы указать, что метод был передан как недопустимый или неуместныйаргумент

Если это определяется состоянием приложения, то:

IllegalStateException

среда Java или приложение Javaне находится в подходящем состоянии для запрошенной операции

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

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