Я пересматриваю код для использования guava Cache.Ключ Guava и сохранение отмеченных исключений
Начальный код:
public Post getPost(Integer key) throws SQLException, IOException {
return PostsDB.findPostByID(key);
}
Для того, чтобы не сломать что-то мне нужно, чтобы сохранить любое выброшенное исключение, как есть, без упаковки его.
Текущее решение выглядит несколько некрасиво:
public Post getPost(final Integer key) throws SQLException, IOException {
try {
return cache.get(key, new Callable<Post>() {
@Override
public Post call() throws Exception {
return PostsDB.findPostByID(key);
}
});
} catch (ExecutionException e) {
Throwable cause = e.getCause();
if (cause instanceof SQLException) {
throw (SQLException) cause;
} else if (cause instanceof IOException) {
throw (IOException) cause;
} else if (cause instanceof RuntimeException) {
throw (RuntimeException) cause;
} else if (cause instanceof Error) {
throw (Error) cause;
} else {
throw new IllegalStateException(e);
}
}
}
Есть ли возможный способ сделать его лучше?
Hesitated, если вопрос, ответ на который должен быть отправлен, должен быть опубликован вообще. Но это дало понять: http://meta.stackexchange.com/questions/2706/posting-and-answering-questions-you-have-already-found-the-answer-to – Vadzim
И спасибо, гуава! – Vadzim
Итак, отметьте это ** ** действительный ответ;) – Xaerxess