Вопрос

Я всегда проверяю аргументы публичных функций и бросать исключения, когда что-то не так.(Для частных помощников я использую утверждения).

Вот так:

if( a < 0 || a >= b )
    throw new IllegalArgumentException("'a' must be greater or equal to 0 and 
        smaller than b ");
.

Но это всегда раздражает меня, чтобы написать эти сообщения об ошибках.Сообщение кажется мне избыточным, так как сообщение является просто отрицанием утверждения

a < 0 || a >= b
.

.

Это также часто бывает, что я переименующуюся переменную с рефакторингом (в Eclipse), а затем сообщение не отражает изменения.Или я изменил условия и забываю изменить сообщения.

Было бы здорово, если бы я мог написать что-то вроде:

assertArgument(a >= 0 && a < b);
.

Это должно поднять незаконнокаргументироватьЭксию с сообщением, такими как

"violated argument assertion: a >= 0 && a < b."
.

в C Вы можете написать макрос (на самом деле в C Assert - это просто макрос). Есть ли простой способ сделать что-то вроде этого в Java?

Спасибо!

Это было полезно?

Решение

На языке C вы не можете использовать макросы, чтобы сделать это, но в CPP (Cre Creprocessor) вы можете :-) Если вы действительно хотите сделать это, нет ничего, что ограничивает вас от работы CPP на вашем источнике Javaсобирается.Это позволило бы вам использовать макросы стиля CPP (вам может потребоваться набросать линии, начиная с #line с выхода CP.)

Для воспроизведения условного за исключением ИМХО, включая слишком много деталей реализации.Если ваше сообщение исключения описывает нарушение в договоре с точки зрения договора (например, «нет родительского объекта, указанного», «сумма не может быть отрицательной»), вам не нужно менять его каждый раз, когда условие изменяется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top