Вы также можете создать объект исключения в другом месте, из которого вы выбросите его.Эта идиома будет полезна в тех случаях, когда сообщение об исключении не просто «someString», а должно быть составлено из данных, полученных из объекта, который повторяется.
Optional<MyCustomizedException> exception = Optional.empty();
for (Map.Entry<A, B> eachElementInMap:myMap.entrySet()) {
if (myList.contains(eachElementInMap.getKey())) {
// Create an exception object that describes e.g., the missing key(s)
// but do not throw it yet.
if( exception.isPresent() ) {
exception.get().addToDescription( /* Context-sensitive information */ );
}
else {
exception = Optional.of(
new MyCustomizedException( /* Context-sensitive information */));
}
}
}
if( exception.isPresent() ) {
throw exception.get();
}
Если единственными данными, хранящимися в исключении, являются строки, эквивалентный эффект может быть достигнут путем накопления описаний проблем в StringBuilder
, но для случаев, когда более интересные данные должны входить в исключениеОбъект, строительство по ходу дела, возможно, стоит рассмотреть.