我一直在尝试抛出带有更多信息的异常。我做了多行,因为我想让它变得冗长并帮助调试。
throw new RuntimeException("Something failed.\n" +
"Please provide another dependency on this class\n\n" +
" MyClass object = new MyClass(depdencyA, dependencyB)");
但是我应该这样做吗?似乎许多例外都是单行,但我觉得它不够冗长。
仅供参考,我正在编写Gradle插件,所以如果有不同的约定,请告诉我。
如果有,请向我显示Oracle等权威人士的参考或文件。
答案 0 :(得分:1)
异常(和异常消息)应尽可能具体和简洁。
他们应该提供足够的信息来查明问题,并告知用户(或管理员)如何解决问题。
你的例子在这些方面失败了:
RuntimeException
非常通用 - 选择更具体的异常类型(可能是某些现有的异常类型,可能是您创建的某种异常类型)答案 1 :(得分:0)
没有一般惯例。但是:
像这样投掷RuntimeException
通常是一个坏主意。
如果针对普通用户,详细的异常消息可能会非常容易。
无法保证合理处理嵌入在异常消息中的标记(如换行符,制表符等)。 (首先,您无法预测将显示消息的窗口的字符宽度,以及(甚至)是否将使用固定宽度的字体。)
国际化....
对于Gradle案例,您可以(应该)检查其他插件的作用,还可以看看Gradle如何处理多行异常消息。
另一种处理为诊断提供额外细节的方法是使用应用程序的记录器记录INFO或DEBUG事件,其中包含之前引发异常的详细信息。< / p>