У меня есть служба, которая ищет запись из БД и возвращает необязательную запись, затем зависит от того, присутствует запись или нет. Мне нужно сделать pu sh сообщение с записью kafka, и вот мой код:
public void process(final String message) throws ProcessorError {
Optional<User> saved = userService.save(message);
saved.ifPresent(theUser -> kafkaProducer.produce(message));
}
однако kafkaProducer может выдать ошибку EncryptionError, которая является подклассом ProcessorError, поэтому IntelliJ не рад этому. как и предполагалось, мне пришлось изменить код на это:
saved.ifPresent(
theUser ->
{
try {
kafkaProducer.produce(message);
} catch (EncryptionError encryptionError) {
encryptionError.printStackTrace();
}
});
, но я не хочу печатать трассировку стека на этом этапе, вместо этого я просто хочу повторно выбросить его, поэтому я изменяю его снова на это:
saved.ifPresent(
theUser ->
{
try {
kafkaProducer.produce(message);
} catch (EncryptionError encryptionError) {
throw encryptionError;
}
});
но IntelliJ снова недоволен, предложил мне окружить этот оператор throw еще одним try / catch, как я могу просто бросить его без раздражающего компилятора?
Спасибо всем за ответы, но мне нужно сохранить его как EncryptionError, а не RuntimeException, и мне не нравится окружать throw encryptionError другой попыткой / перехватить, сделать go прежним способом:
if (saved.isPresent()) {
kafkaProducer.produce(message);
}