Java中EmptyStackException的自定义错误消息?
我正在用Java实现堆栈。对于Java中EmptyStackException的自定义错误消息?,java,Java,我正在用Java实现堆栈。对于pop操作,我想抛出EmptyStackException。根据该函数,EmptyStackException有一个构造函数,EmptyStackException()。它- 构造一个新的EmptyStackException,其错误消息字符串为null 因此它不能将我的自定义错误消息作为参数。我需要设置自定义错误消息,因为它的错误消息为null,getMessage()返回null。如果我使用此异常,我必须在捕获EmptyStackException的地方对错误消
pop
操作,我想抛出EmptyStackException
。根据该函数,EmptyStackException
有一个构造函数,EmptyStackException()
。它-
构造一个新的EmptyStackException,其错误消息字符串为null
因此它不能将我的自定义错误消息作为参数。我需要设置自定义错误消息,因为它的错误消息为null,getMessage()返回null。如果我使用此异常,我必须在捕获EmptyStackException
的地方对错误消息进行硬编码
public int pop() {
if (empty())
throw new EmptyStackException(); // cannot take error message as argument
int data = top.getData();
top = top.getNext();
return data;
}
public static void main(String[] args) {
Stack stack = new Stack();
try {
System.out.println(stack.pop());
} catch (EmptyStackException e) {
System.out.println("Stack is empty"); // my hardcoded message
}
另一种方法是使用Exception
而不是EmptyStackException
。它有一个构造函数:异常(字符串消息)
。使用此选项,我可以设置自定义消息
public int pop() throws Exception {
if (empty())
throw new Exception("Stack is empty"); // take message as argument
int data = top.getData();
top = top.getNext();
return data;
}
public static void main(String[] args) {
Stack stack = new Stack();
try {
System.out.println(stack.pop());
} catch (Exception e) {
System.out.println(e.getMessage()); //print message set from the throwing position
}
我的问题是,哪种方式是最佳实践,或者还有其他方式吗?
EmptyStackException
类是自我解释的。不要认为需要任何额外的信息。我会保持原样:)。如果您仍然需要消息,那么创建自定义异常类是广泛使用的方法。创建您自己的自定义异常,如下所示:
public class EmptyParameterException extends Exception {
public EmptyParameterException (String message) {
super(message);
}
}
您还可以扩展
EmptyStackException
并编写接收消息的构造函数,以及返回字符串的getMessage
。为什么需要自定义消息?只有一件事EmptyStackException
可能意味着..它的父类是RuntimeException,它有一个支持字符串的cstr。您是否尝试过使用自定义消息?我从来没有试过,因为我觉得它已经不言自明了。我认为记录自定义消息就足够了。@SocraticPhoenix因为EmptyStackException
意味着一件事,所以打印自定义消息可以吗?我正在尝试知道哪种是最佳做法。我想在捕获异常后打印错误消息。但是EmptyStackException
没有错误消息,我只能打印null。所以我在catch块硬编码消息。这是最佳实践吗?如果显式捕获EmptyStackException,例如尝试{/**/}catch(EmptyStackException e){this.log.error(“堆栈为空”);}