Непроверенный ThrowingSupplier для лямбд - PullRequest
0 голосов
/ 06 июля 2019

Как я мог написать ThrowingSupplier с непроверенным методом, который мог бы заменить эту часть кода?Я действительно понятия не имею, с чего начать, должен ли это быть интерфейс или, скорее, класс.

        try {
            // get connection with the database
            connection = dataSource.getConnection();
        } catch (Exception e) {
            throw new UndeclaredThrowableException(e);
        }

Я хотел бы получить что-то вроде

Connection connection = ThrowingSupplier.unchecked(dataSource::getConnection).get();

Любые идеи, каккак это должно выглядеть?Я не уверен, должен ли это быть интерфейс или класс, который я пытался написать, но тогда я не смог создать статический метод без проверки и не стал бы создавать новый экземпляр этого.

1 Ответ

1 голос
/ 06 июля 2019

Если я правильно понимаю, это то, что вы хотите:

public class ThrowingSupplier {
    public static <T> Supplier<T> unchecked(Callable<T> callable) {
        return () -> {
            try {
                return callable.call();
            }
            catch (Exception e) {
                throw new UndeclaredThrowableException(e);
            }
        };
    }

    // example usage:
    public static void main(String[] args) {
        DataSource dataSource = null;
        Connection connection = ThrowingSupplier.unchecked(dataSource::getConnection).get();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...