Что вы описываете звучит семантически странно, конечно, вызывая getNextItem()
не имеет смысла, если hasItems()
не правда?
В любом случае, идея такая же, независимо от того, как работает ваша логика: оберните объекты OutgoingItems
в новый класс, который проверяет условие для вас. Я сделал чек с assert
, но вы можете выбрать, как вам нравится.
public class OutgoingItemsDelegate {
private final OutgoingItems items;
public OutgoingItemsDelegate(OutgoingItems items) {
this.items = items;
}
public boolean hasItems() {
return items.hasItems();
}
public Object getNextItem() {
assert !items.hasItems();
// alternatively you can do this:
// if (items.hasItems()) throw new IllegalStateException("hasItems() must not be true");
return items.getNextItems();
}
}
Существует, конечно, небольшая производительность и пространство над головой, возможно, придется заплатить с этим решением, и это идеальное решение, чтобы исправить OutgoingItems
себя, но если это невозможно, это жизнеспособный вариант.
* Обратите внимание, что для выражения assert
, которое должно быть оценено, вам необходимо использовать флаг -ea
в командной строке.