From 3878fac9f58904d1c16c797a86b3a4aac4994639 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Fri, 6 May 2022 10:07:33 +0200 Subject: [PATCH] Default nullable implementation --- .../data/generator/NativeNullable.java | 6 ++- .../data/generator/TypedNullable.java | 46 ++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/main/java/it/cavallium/data/generator/NativeNullable.java b/src/main/java/it/cavallium/data/generator/NativeNullable.java index 2855298..e126b89 100644 --- a/src/main/java/it/cavallium/data/generator/NativeNullable.java +++ b/src/main/java/it/cavallium/data/generator/NativeNullable.java @@ -7,12 +7,14 @@ public interface NativeNullable { boolean isEmpty(); - boolean isPresent(); + default boolean isPresent() { + return !isEmpty(); + } @NotNull T orElse(@NotNull T defaultValue); - @NotNull NativeNullable or(@NotNull NativeNullable fallback); + @NotNull NativeNullable or(@NotNull NativeNullable fallback); @Nullable T getNullable(); diff --git a/src/main/java/it/cavallium/data/generator/TypedNullable.java b/src/main/java/it/cavallium/data/generator/TypedNullable.java index 22a521e..c0429be 100644 --- a/src/main/java/it/cavallium/data/generator/TypedNullable.java +++ b/src/main/java/it/cavallium/data/generator/TypedNullable.java @@ -1,9 +1,53 @@ package it.cavallium.data.generator; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public interface TypedNullable extends NativeNullable { @NotNull - T get() throws NullPointerException; + default T get() throws NullPointerException { + var value = getNullable(); + if (value == null) { + throw new NullPointerException(); + } else { + return value; + } + } + + @Override + default @Nullable T getNullable(@Nullable T defaultValue) { + var value = getNullable(); + return value == null ? defaultValue : value; + } + + @Override + default @NotNull T orElse(@NotNull T defaultValue) { + var value = getNullable(); + if (value == null) { + throw new NullPointerException(); + } else { + return value; + } + } + + @Override + default @NotNull NativeNullable or(@NotNull NativeNullable fallback) { + var value = getNullable(); + if (value == null) { + return fallback; + } else { + return this; + } + } + + @Override + default boolean isPresent() { + return getNullable() != null; + } + + @Override + default boolean isEmpty() { + return getNullable() == null; + } }