代码之家  ›  专栏  ›  技术社区  ›  Dario Seidl

自动的IllegalArgumentException消息?

  •  6
  • Dario Seidl  · 技术社区  · 14 年前

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

    这样地:

    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中有这样一种简单的方法吗?

    谢谢您!

    1 回复  |  直到 14 年前
        1
  •  3
  •   rsp    14 年前

    在C语言中,您不能使用宏来实现这一点,但是在CPP(C预处理器)中,您可以:-如果您真的想这样做,那么在编译之前,没有什么限制您在Java源上运行CPP。这样可以使用cpp样式的宏(可能需要从 #line 从CP输出。)

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