Не лекарство для решения проблемы рекурсии, но вы также должны рассмотреть возможность проверки цены во время строительства.
Иногда (чаще всего?) Лучше, чтобы ваш конструктор завершился с ошибкой с исключением, вместо того, чтобы разрешить создание несовместимого объекта. Таким образом, легче локализовать такую ошибку.
Пример:
public Book(String bookTitle, String bookAuthor, String bookCode, int bookPages, boolean paperback, double bookRetail)
{
if (bookRetail < 0.0)
throw new IllegalArgumentException("negative bookRetail: " + bookRetail);
...
}
Существует риск того, что ваше приложение может выйти из строя в производственной среде, что может привести к путанице. Чтобы избежать этого, вы можете использовать assert
или, по крайней мере, выдавать или регистрировать ошибку и использовать какую-то альтернативу. Проверка assert
должна быть включена для разработки и может быть отключена при производстве. Подробнее см. Программирование с утверждениями
public Book(String bookTitle, String bookAuthor, String bookCode, int bookPages, boolean paperback, double bookRetail)
{
assert bookRetail >= 0.0 : bookRetail;
...
}
или
public Book(String bookTitle, String bookAuthor, String bookCode, int bookPages, boolean paperback, double bookRetail)
{
if (bookRetail >= 0.0) {
price = bookRetail;
} else {
price = 0.0;
// display or log the "illegal argument"
Exception ex = new IllegalArgumentException("negative bookRetail: " + bookRetail);
ex.printStackTrace();
}
...
}