2016-02-21 2 views
2

Я разрабатываю библиотеку для Android, которую я намереваюсь открывать, и, естественно, я хочу пометить все поля перед публикацией, так что пользователи будут приятно впечатлены моим кодом. Гм.Когда настало время бросить исключение RuntimeException?

Как и во многих библиотеках, для работы библиотеки необходимы определенные основные конфигурации.

public static final String API_KEY = "your_api_key_here"; 

В приведенном выше случае, когда пользователь передает свой ключ API в библиотеку, я ставлю простой матч строки в для «your_api_key_here», и если он совпадает, я собираюсь бросить RuntimeException, поскольку они просто не прочитали основные инструкции, и я хочу, чтобы их приложение умерло.

Является ли это допустимым использованием исключения RuntimeException? Если это не так, то в Java что такое?

EDIT - Моя мотивация для размещения это due to this post, где ОП линчевали возгласы «почему !?» за вопрос, как бросить один.

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

Я отметил ответ как правильный из-за наибольшего числа опросов и последующего комментария @ mech ниже, я создал обычай ReadTheDocumentationException, который обеспечивает подходящее убедительное сообщение.

+0

Вы хотите бросить исключение, когда пользователь не инициализирует права API_KEY –

+0

@QandeelAbbasi Yup – brandall

+3

Возможно, сделать ReadTheDocumentationException, полученное из RTE? Специфичность хороша :) – mech

ответ

7

Я думаю, вы должны использовать незаконное исключение аргумента, которое является подклассом java.lang.RuntimeException. Вы можете сделать что-то вроде этого

if(API_KEY.equals("your_api_key_here")) 
    throw new IllegalArgumentException("you message here"); 

Для получения дополнительной информации см this

+4

IMO это для вызовов методов с явно недопустимыми аргументами. Это скорее ошибка конфигурации библиотеки/настройки, которая скорее является «InvalidStateException» («среда Java или приложение Java не находятся в соответствующем состоянии для запрошенной операции»). Но это скорее мнение, чем что-либо другое. –

+1

'IllegalArgumentException' для * неправильных * аргументов, переданных в метод. – Mussa

+0

ОП не сказал, что отсутствующей конфигурационной опцией был аргумент метода. Он может быть похоронен в любом месте приложения. Я бы не использовал IllegalArgument, если это не фактический аргумент, как говорит первый комментатор. –

3

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

2

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

В Java существует два типа исключений, отмеченных и непроверенных.

RuntimeException и все его подклассы являются «непроверенными» исключениями, что означает, что компилятор не требует их улова. Вы можете использовать их, чтобы разрушить ваш процесс, если что-то не так. Вызывающий может по-прежнему захватывать и обрабатывать их самостоятельно, поэтому будьте готовы, чтобы вызывающий абонент мог продолжить неправильно звонить в вашу библиотеку.

Исключение и все его подклассы (кроме RuntimeException) «проверены», что означает, что компилятор требует, чтобы вызывающий вызывал их или объявлял в объявлении метода, что его можно было бы выбросить. Вы используете это в тех случаях, когда вы ожидаете, что вызывающий абонент попытается восстановить из любого условия, вызвавшего выброс исключения.

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