要自定义错误消息,我们需要执行以下操作
相反,为什么没有办法只更改Exception错误消息并重新抛出它?
我知道这是一个基本问题,但很想知道你的意见。
举个例子:
try
{
// Any operation which might throw NumberFormatException.
int result = 1 / 0;
} catch (NumberFormatException e)
{
// Observe that if I just throw by 'e' then I will get message as '/ by zero'
throw e;
// OR I wrap the exception (optional) and throw new exception with custom message.
throw new NumberFormatException("<Custom Message> instead of '/ by zero'");
// Instead, wouldn't it be easy if I could just overwrite the exception message of NumberFormatException?
// below code isn't valid, but wondering why Java doesn't let me do this?
e.setMessage("<Custom Message> instead of '/ by zero'");
throw e;
}
答案 0 :(得分:3)
catch (NumberFormatException e){
e.setMessage("<Custom Message> instead of '/ by zero'");
throw e;
}
如果Java
允许您这样做,这是一种处理异常的错误方法。现在您丢失了原始消息并丢失了异常的堆栈跟踪。这就是为什么没有任何意义让你设置消息,没有必要捕获并抛出相同的异常,只需抛出它并在上层处理它。
如果你想做一些你想做的事,你可以按照以下方式去做
catch(NumberFormatException e){
throw new MyException("your message matched with the method" ,e);
}
在这种情况下,您可以看到,在添加邮件时,原始邮件和stackTrace
都会保留。
答案 1 :(得分:0)
如果您可以更改异常消息,则可以编写一些真正的错误代码。异常是方法合同的一部分。它反映了代码深处发生的事情。
在那里沟通关于代码中更深层次出错的事情。更改此消息不是您的业务。您可以将消息抛出到其他可以处理/了解如何处理此异常的方法,或者如果您愿意,可以捕获异常并抛出自己的异常。
基本上,消息是异常的固有部分(如果您愿意,则不可变)。
写一些像
这样的东西也不难catch(Exception e){
throw new Exception("custom message" ,e);
}
哪一行短于:
catch(Exception e){
e.setMessage('my custom message');
throw e;
}
问问自己,如果你的工作是马的一个人,他必须向A人发送一封信给B,你读了这封信并意识到需要更新一些额外的信息。你会把这封信重写并放回信封里,或者你会写一个便条纸并把它贴在信封上吗?
答案 2 :(得分:0)
没有setMessage()
meghod,你可以抛出不同的NFE实例,但原因除了原因:
catch (NumberFormatException e) {
throw new NumberFormatException("<Custom Message> instead of '/ by zero'", e);
}
保留异常的上下文非常重要,因此堆栈跟踪对调用者尽可能有用。