#java #inheritance #error-handling #stack
#java #наследование #обработка ошибок #стек
Вопрос:
Я создаю стек фиксированного размера, при попытке вставить новый элемент, когда стек уже достиг предела, функция push должна выдавать исключение, чтобы уведомить о достижении предела, см. Код spinet ниже
public class SizedStack<T> extends Stack<T> {
private int maxSize;
public SizedStack(int size) {
super();
this.maxSize = size;
}
@Override
public T push(T object) throws Exception{ // error message for the exception throwing
//If the stack is too big, return an Exception
while (this.size() > maxSize) {
throw new Exception("Stack Overflow");
}
return super.push(object);
}
}
Проблемы: push
функция из родительского stack
класса не возвращает никаких исключений. Поэтому я получаю ошибку для своего кода.
Exception is not compatible with throws clause in Stack<t>.push(T);
Как я могу решить эту проблему?
Комментарии:
1. Просто создайте исключение RuntimeException (или, скорее, подкласс)
2. Проблема
push
в том, что она наследуется от суперклассаStack
и не генерирует там исключение. Добавление проверяемого исключения к унаследованному методу является незаконным, поскольку оно нарушает полиморфизм. Вам нужно либо отказаться от наследования, либо создать непроверенное исключение