Package io.blt.util
Class Obj
java.lang.Object
io.blt.util.Obj
Static utility methods for operating on
Object
.
Includes object construction, mutation, fallbacks and validation.
-
Method Summary
Modifier and TypeMethodDescriptionstatic <T> Optional
<T> newInstanceOf
(T obj) Returns a new instance of the same type as the input object if possible; otherwise, returns empty.static <T,
E extends Throwable>
TorElseGet
(T value, ThrowingSupplier<T, E> supplier) Returnsvalue
if non-null, else invokes and returns the result ofsupplier
.static <T,
E extends Throwable>
TorElseOnException
(ThrowingSupplier<T, E> supplier, T defaultValue) Invokes and returns the result ofsupplier
if no exception is thrown, else returnsdefaultValue
.orEmptyOnException
(ThrowingSupplier<T, E> supplier) Invokes and returns the result ofsupplier
if no exception is thrown; otherwise, returns empty.static <T,
E extends Throwable>
Tpoke
(T instance, ThrowingConsumer<T, E> consumer) Passes theinstance
to theconsumer
, then returns theinstance
.static <T,
E extends Throwable>
Ttap
(Supplier<T> supplier, ThrowingConsumer<T, E> consumer) Calls thesupplier
to retrieve an instance which is mutated by theconsumer
then returned.
-
Method Details
-
poke
Passes theinstance
to theconsumer
, then returns theinstance
. e.g.,var user = Obj.poke(new User(), u -> { u.setName("Greg"); u.setAge(15); });
Optionally, the
consumer
may throw which will bubble up.- Type Parameters:
T
- type ofinstance
E
- type ofconsumer
throwable- Parameters:
instance
- instance to consume and returnconsumer
- operation to perform oninstance
- Returns:
instance
after accepting side effects viaconsumer
- Throws:
E
-
tap
public static <T,E extends Throwable> T tap(Supplier<T> supplier, ThrowingConsumer<T, E> consumer) throws ECalls thesupplier
to retrieve an instance which is mutated by theconsumer
then returned. e.g.,var user = Obj.tap(User::new, u -> { u.setName("Greg"); u.setAge(15); });
Optionally, the
consumer
may throw which will bubble up.- Type Parameters:
T
- type of instanceE
- type ofconsumer
throwable- Parameters:
supplier
- supplies an instance to consume and returnconsumer
- operation to perform on supplied instance- Returns:
- Supplied instance after applying side effects via
consumer
- Throws:
E
-
orElseGet
public static <T,E extends Throwable> T orElseGet(T value, ThrowingSupplier<T, E> supplier) throws EReturnsvalue
if non-null, else invokes and returns the result ofsupplier
.Optionally, the
e.g.,supplier
may throw which will bubble up.private URL homepageOrDefault(URL homepage) throws MalformedURLException { return Obj.orElseGet(homepage, () -> new URL("https://google.com")); }
- Type Parameters:
T
- type of the returned valueE
- type ofsupplier
throwable- Parameters:
value
- returned if non-nullsupplier
- called and returned ifvalue
is null- Returns:
value
if non-null, else the result ofsupplier
- Throws:
E
-Throwable
that may be thrown if thesupplier
is invoked
-
orElseOnException
public static <T,E extends Throwable> T orElseOnException(ThrowingSupplier<T, E> supplier, T defaultValue) Invokes and returns the result ofsupplier
if no exception is thrown, else returnsdefaultValue
. e.g.,private InputStream openFileOrResource(String name) { return Obj.orElseOnException( () -> new FileInputStream(name), getClass().getResourceAsStream(name)); }
- Type Parameters:
T
- type of the returned valueE
- type ofsupplier
throwable- Parameters:
supplier
- called and returned if no exception is throwndefaultValue
- returned if an exception is thrown when callingsupplier
- Returns:
- result of
supplier
if no exception is thrown, elsedefaultValue
-
orEmptyOnException
public static <T,E extends Throwable> Optional<T> orEmptyOnException(ThrowingSupplier<T, E> supplier) Invokes and returns the result ofsupplier
if no exception is thrown; otherwise, returns empty. e.g.,private Optional<HttpResponse<InputStream>> fetchAsStream(HttpRequest request) { try (var client = HttpClient.newHttpClient()) { return Obj.orEmptyOnException(() -> client.send( request, HttpResponse.BodyHandlers.ofInputStream())); } }
-
newInstanceOf
Returns a new instance of the same type as the input object if possible; otherwise, returns empty. Supports only instances of concrete types that have a public zero argument constructor. e.g.,public <K, V> Map<K, V> mapOfSameTypeOrHashMap(Map<K, V> map) { return Obj.newInstanceOf(map).orElse(new HashMap<>()); }
- Type Parameters:
T
- type ofobj
- Parameters:
obj
- object to try and create a new instance of- Returns:
- a new instance of the same type as
obj
or empty
-