Interface CheckedFunction<T,R>
-
- Functional Interface:
- This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
@FunctionalInterface public interface CheckedFunction<T,R>
Variant ofFunctionthat behaves likeFunction, but which allows checkedException's to be thrown from itsapply(Object)method
– the function argument type – the function result type
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Modifier and Type Method Description Rapply(T argument)This method performs the operation that may fail with a CheckedExceptionstatic <T,R>
Function<T,R>safe(CheckedFunction<T,R> functionThatCanFailWithACheckedException)Wraps aCheckedFunction(basically a lambda with one argument that returns a result and which throws a CheckedException) by returning a newFunctioninstance
The returnedFunction.apply(Object)method delegates directly to theapply(Object)and catches any thrown checkedException's and rethrows them as aCheckedExceptionRethrownException
Unless you provide a context-message (usingsafe(String, CheckedFunction)then any caught checkedException's message also becomes theCheckedExceptionRethrownException's message.
AnyRuntimeException's thrown aren't caught and the calling code will receive the originalRuntimeExceptionthrown.
Usage example:
Let's say we have a method calledsomeOperationthat cannot change, but which accepts aFunctionwith the purpose of the calling theFunction.apply(Object).static <T,R>
Function<T,R>safe(String contextMessage, CheckedFunction<T,R> functionThatCanFailWithACheckedException)Wraps aCheckedFunction(basically a lambda with one argument that returns a result and which throws a CheckedException) by returning a newFunctioninstance
The returnedFunction.apply(Object)method delegates directly to theapply(Object)and catches any thrown checkedException's and rethrows them as aCheckedExceptionRethrownException
AnyRuntimeException's thrown aren't caught and the calling code will receive the originalRuntimeExceptionthrown.
Usage example:
Let's say we have a method calledsomeOperationthat cannot change, but which accepts aFunctionwith the purpose of the calling theFunction.apply(Object).
-
-
-
Method Detail
-
safe
static <T,R> Function<T,R> safe(CheckedFunction<T,R> functionThatCanFailWithACheckedException)
Wraps aCheckedFunction(basically a lambda with one argument that returns a result and which throws a CheckedException) by returning a newFunctioninstance
The returnedFunction.apply(Object)method delegates directly to theapply(Object)and catches any thrown checkedException's and rethrows them as aCheckedExceptionRethrownException
Unless you provide a context-message (usingsafe(String, CheckedFunction)then any caught checkedException's message also becomes theCheckedExceptionRethrownException's message.
AnyRuntimeException's thrown aren't caught and the calling code will receive the originalRuntimeExceptionthrown.
Usage example:
Let's say we have a method calledsomeOperationthat cannot change, but which accepts aFunctionwith the purpose of the calling theFunction.apply(Object).
The problem willpublic void someOperation(Function<Integer, String> operation) { // ... Logic ... String value = operation.apply(10); // ... More logic --- }Function.apply(Object)occurs whenFunctioncalls any API that throws a checkedException, e.g. theFileAPI.
SinceFunction.apply(Object)doesn't define that it throws anyException's we're forced to add a try/catch to handle theIOExceptionfor the code to compile:someOperation(value -> { try { // Logic that uses the File API return "some-value"; } catch (IOException e) { throw new RuntimeException(e); } }));
This is where theCheckedFunctioncomes to the aid as itsapply(Object)methods defines that it throws a CheckedExceptionand itssafe(CheckedFunction)will return a newFunctioninstance with aFunction.apply(Object)method that ensures that theapply(Object)method is called and any checkedException's thrown will be caught and rethrown as aCheckedExceptionRethrownException:someOperation(CheckFunction.safe(value -> { // Logic that uses the File API that throws IOException return "some-value"; }));- Type Parameters:
T- the argument typeR- the return type- Parameters:
functionThatCanFailWithACheckedException- theCheckedFunctioninstance that will be wrapped as aFunction- Returns:
- a
Functionwith aFunction.apply(Object)method that ensures that theapply(Object)method is called whenFunction.apply(Object)and any checkedException's thrown will be caught and rethrown as aCheckedExceptionRethrownException.
AnyRuntimeException's thrown aren't caught and the calling code will receive the originalRuntimeExceptionthrown. - Throws:
CheckedExceptionRethrownException- in case theapply(Object)method throws a checkedException
-
safe
static <T,R> Function<T,R> safe(String contextMessage, CheckedFunction<T,R> functionThatCanFailWithACheckedException)
Wraps aCheckedFunction(basically a lambda with one argument that returns a result and which throws a CheckedException) by returning a newFunctioninstance
The returnedFunction.apply(Object)method delegates directly to theapply(Object)and catches any thrown checkedException's and rethrows them as aCheckedExceptionRethrownException
AnyRuntimeException's thrown aren't caught and the calling code will receive the originalRuntimeExceptionthrown.
Usage example:
Let's say we have a method calledsomeOperationthat cannot change, but which accepts aFunctionwith the purpose of the calling theFunction.apply(Object).
The problem willpublic void someOperation(Function<Integer, String> operation) { // ... Logic ... String value = operation.apply(10); // ... More logic --- }Function.apply(Object)occurs whenFunctioncalls any API that throws a checkedException, e.g. theFileAPI.
SinceFunction.apply(Object)doesn't define that it throws anyException's we're forced to add a try/catch to handle theIOExceptionfor the code to compile:someOperation(value -> { try { // Logic that uses the File API return "some-value"; } catch (IOException e) { throw new RuntimeException(e); } }));
This is where theCheckedFunctioncomes to the aid as itsapply(Object)methods defines that it throws a CheckedExceptionand itssafe(CheckedFunction)will return a newFunctioninstance with aFunction.apply(Object)method that ensures that theapply(Object)method is called and any checkedException's thrown will be caught and rethrown as aCheckedExceptionRethrownException:someOperation(CheckFunction.safe(msg("Processing file {}", fileName), value -> { // Logic that uses the File API that throws IOException return "some-value"; }));- Type Parameters:
T- the argument typeR- the return type- Parameters:
contextMessage- a string that the described the content for theCheckedFunctionand which will be used as message in anyCheckedExceptionRethrownExceptionthrownfunctionThatCanFailWithACheckedException- theCheckedFunctioninstance that will be wrapped as aFunction- Returns:
- a
Functionwith aFunction.apply(Object)method that ensures that theapply(Object)method is called whenFunction.apply(Object)and any checkedException's thrown will be caught and rethrown as aCheckedExceptionRethrownException.
AnyRuntimeException's thrown aren't caught and the calling code will receive the originalRuntimeExceptionthrown. - Throws:
CheckedExceptionRethrownException- in case theapply(Object)method throws a checkedException
-
apply
R apply(T argument) throws Exception
This method performs the operation that may fail with a CheckedException- Parameters:
argument- the function argument- Returns:
- the result of performing the function
- Throws:
Exception- this method can throw both checkedException's as well asRuntimeException's
-
-