Я реализую стек в Java. Для операции pop я хочу бросить EmptyStackException. Согласно документации , EmptyStackException имеет один конструктор, EmptyStackException(). Это -
Создает новый объект EmptyStackException с нулевым значением в качестве строки сообщения об ошибке.
Поэтому он не может принимать мое пользовательское сообщение об ошибке в качестве параметра. Мне нужно установить пользовательское сообщение об ошибке, потому что оно имеет значение 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. У него есть конструктор: Exception(String message). Используя это, я могу установить свое собственное сообщение.
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и написать конструктор, который получает сообщение, иgetMessage, который возвращает вашу строку. - person Shirkam   schedule 20.09.2017EmptyStackExceptionможет означать только одно... - person Socratic Phoenix   schedule 20.09.2017EmptyStackExceptionозначает одно, можно ли распечатать собственное сообщение? Я пытаюсь узнать, что является лучшей практикой. - person Jobayer Ahmmed   schedule 20.09.2017