Кэш Guava и сохранение отмеченных исключений

Я рефакторирую код, чтобы использовать guava Cache .

Исходный код:

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() {
            @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);
        }
    }
}

Есть ли какой-либо способ сделать его лучше?

22
задан Vadzim 27 December 2011 в 16:21
поделиться