Исправить исключение, которое выдается при попытке вставки дубликата ключа? - PullRequest
6 голосов
/ 09 июля 2011

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

У меня есть класс, который объединяет SortedMap с настройкой свойства, позволяющей разрешать или запрещать дубликаты ключей.Я пытаюсь выяснить, какое исключение я должен выбросить, если дублирующиеся ключи не разрешены, и делается попытка добавить один.

Я проверил документы на Java для класса Exception, и ни один из известных прямых потомков не показался подходящим.Должен ли я просто создать собственный класс EDuplicateMapKey, например, и бросить его?Если да, то как мне не получить большую кучу файлов классов, по одному на каждый пользовательский тип Exception?

Что здесь считается «лучшей практикой»?

Ответы [ 3 ]

7 голосов
/ 09 июля 2011

Создайте свое собственное исключение. Например, Java EE имеет DuplicateKeyException, вы можете сделать что-то похожее для вашей пользовательской карты.

5 голосов
/ 09 июля 2011

Должен ли я создать собственный класс EDuplicateMapKey, например, и выбросить его?

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

Как мне не получить большую кучу файлов классов, по одному для каждого пользовательского типа исключения?

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

2 голосов
/ 09 июля 2011

Лично , IllegalStateException или IllegalArgumentException выглядит так, как будто это может сработать, но я тоже вижу аргументы против этого.

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