8

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

像这样:

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);

这应该引发 IllegalArgumentException 并带有类似的消息

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

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

4

1 回答 1

2

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

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

于 2010-07-25T20:27:46.607 回答