自动IllegalArgumentException消息?

Dar*_*idl 7 java assertions illegalargumentexception

我总是检查公共函数的参数,并在出错时抛出异常.(对于私人助手,我使用断言).

像这样:

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

但是编写这些错误消息总是令我很烦.这条消息对我来说似乎是多余的,因为消息只是对陈述的否定

a < 0 || a >= b
Run Code Online (Sandbox Code Playgroud)

.

我经常会通过重构(在eclipse中)重命名变量,然后消息不会反映更改.或者我改变条件而忘记更改消息.

如果我能写下这样的东西,那就太好了:

assertArgument(a >= 0 && a < b);
Run Code Online (Sandbox Code Playgroud)

这应该引发一个类似的消息的IllegalArgumentException

"violated argument assertion: a >= 0 && a < b."
Run Code Online (Sandbox Code Playgroud)

在C中你可以编写一个宏(实际上在C断言中只是一个宏).有没有一种简单的方法在java中做这样的事情?

谢谢!

rsp*_*rsp 2

在 C 语言中,您不能使用宏来执行此操作,但在 cpp(C 预处理器)中,您可以:-) 如果您确实想这样做,则没有什么可以限制您在编译 java 源之前在其上运行 cpp。#line这将允许您使用 cpp 样式宏(您可能需要从 cp 输出中删除以 开头的行。)

恕我直言,要重现异常中的条件,包括太多的实现细节。如果您的异常消息按照合同描述了合同中的违规行为(例如“未给出父对象”、“金额不能为负数”),则无需在每次条件发生变化时都进行更改。