Package eu.ciechanowiec.sneakyfun
Interface SneakyRunnable<X extends Exception>
-
- Type Parameters:
X- the type of exception that might be thrown during execution of the functional method of this interface
- 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 SneakyRunnable<X extends Exception>
Represents a function that takes any command and runs it in a void manner, without returning a result.This is a
functional interfacewhose functional method isrun().
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Modifier and Type Method Description voidrun()Takes any command and runs it in a void manner, without returning a result value.static <X extends Exception>
Runnablesneaky(SneakyRunnable<X> runnable)Wraps the passed sneaky functional interface (sneaky interface) into the analogous functional interfaceRunnable(original interface).
-
-
-
Method Detail
-
run
void run() throws X extends Exception
Takes any command and runs it in a void manner, without returning a result value.
-
sneaky
static <X extends Exception> Runnable sneaky(SneakyRunnable<X> runnable)
Wraps the passed sneaky functional interface (sneaky interface) into the analogous functional interfaceRunnable(original interface).-
Both the wrapped sneaky interface and the wrapping original interface
have unary functional methods with identical method signatures and return types (if any).
The only relevant difference between the unary functional methods of those interfaces is
that the functional method of the sneaky interface has a
throwsclause with a denoted exception, while the functional method of the original interface doesn't have it.For example, compare these two functional method declarations:
// Functional method of the original interface `Function`: R apply(T t); // Functional method of the sneaky interface `SneakyFunction`: R apply(T input) throws X; -
A
throwsclause in the unary functional method of the wrapped sneaky interface allows to develop elegant lambda expressions via disabling enforcement of checked exceptions handling. To achieve that, simply wrap implementation of a lambda expression into a staticsneaky(...)method declared in the respective sneaky interface, as shown in the examples below. -
Example - Outside Streams
- Classical & unsightly approach:
Function
toURI = input -> { try { return new URI(input); } catch (URISyntaxException exception) { log.error("Unable to create a URI", exception); return null; } }; URI uri = toURI.apply("google.com"); - Sneaky & elegant approach:
SneakyFunction
toURI = URI::new; Function toURIAdapter = sneaky(toURI); URI uri = toURIAdapter.apply("google.com");
- Classical & unsightly approach:
-
Example - In Streams
- Classical & unsightly approach:
List
rawURIs = List.of("google.com", "ciechanowiec.eu"); List pureURIs = rawURIs.stream() .map(rawURI -> { try { return new URI(rawURI); } catch (URISyntaxException exception) { log.error("Unable to create a URI", exception); return null; } }) .toList(); - Sneaky & elegant approach:
List
rawURIs = List.of("google.com", "ciechanowiec.eu"); List pureURIs = rawURIs.stream() .map(sneaky(URI::new)) .toList();
- Classical & unsightly approach:
- For details see documentation: https://github.com/ciechanowiec/sneakyfun.
- Type Parameters:
X- the type of exception that might be thrown during execution of the functional method of this interface- Parameters:
runnable- sneaky functional interface that will be wrapped into the analogous original functional interfaceRunnable- Returns:
- original functional interface
Runnablewrapping the passed sneaky functional interface
-
Both the wrapped sneaky interface and the wrapping original interface
have unary functional methods with identical method signatures and return types (if any).
The only relevant difference between the unary functional methods of those interfaces is
that the functional method of the sneaky interface has a
-
-