Как я мог написать ThrowingSupplier с непроверяемым методом, который мог бы заменить эту часть кода? Я действительно понятия не имею, с чего начать, если это будет интерфейс или, скорее, класс.
try {
// get connection with the database
connection = dataSource.getConnection();
} catch (Exception e) {
throw new UndeclaredThrowableException(e);
}
Я хотел бы получить что-то вроде
Connection connection = ThrowingSupplier.unchecked(dataSource::getConnection).get();
Есть идеи, как это должно выглядеть? Я не уверен, должен ли это быть интерфейс или класс, который я пытался написать, но тогда я не мог создать непроверенный статический метод, и я бы не стал создавать новый экземпляр этого.




Если я правильно понимаю, это то, что вы хотите:
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();
}
}
Возможно, вы захотите проверить, что вызываемый объект не является
null(например, с помощьюObjects.requireNonNull), прежде чем возвращать поставщику. В противном случае вызываемыйnullбудет замечен слишком поздно и, возможно, в совершенно не связанном месте.