All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.core.util.OptionalImpl Maven / Gradle / Ivy

package com.moon.core.util;

import com.moon.core.lang.Executable;

import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author moonsky
 */
final class OptionalImpl implements Optional {

    final static Optional EMPTY = Empty.INSTANCE;

    private final T value;

    public OptionalImpl(T value) { this.value = Objects.requireNonNull(value); }

    @Override
    public T getOrNull() { return value; }

    @Override
    public int hashCode() { return Objects.hashCode(value); }

    @Override
    public boolean equals(Object obj) {
        if (obj == this) { return true; }
        if (!(obj instanceof OptionalImpl)) { return false; }
        return Objects.equals(value, ((OptionalImpl) obj).value);
    }

    @Override
    public String toString() { return String.valueOf(value); }

    private enum Empty implements Optional {
        INSTANCE;

        @Override
        public Object getOrNull() { return null; }

        @Override
        public Object get() { throw new NullPointerException("Optional value is null."); }

        @Override
        public Object getOrDefault(Object defaultValue) { return defaultValue; }

        @Override
        public Object getOrElse(Supplier supplier) { return supplier.get(); }

        @Override
        public boolean isPresent() { return false; }

        @Override
        public boolean isAbsent() { return true; }

        @Override
        public Optional filter(Predicate predicate) { return this; }

        @Override
        public Optional elseIfAbsent(Supplier supplier) { return Optional.ofNullable(supplier.get()); }

        @Override
        public Optional defaultIfAbsent(Object defaultValue) { return Optional.ofNullable(defaultValue); }

        @Override
        public Optional ifPresent(Consumer consumer) { return this; }

        @Override
        public Optional ifAbsent(Executable executor) {
            executor.execute();
            return this;
        }

        @Override
        public java.util.Optional toUtil() { return java.util.Optional.empty(); }

        @Override
        public Optional transform(Function computer) {
            return defaultIfAbsent(computer.apply(null));
        }

        @Override
        public Object compute(Function computer) { return computer.apply(null); }

        @Override
        public Object getOrThrow(Supplier supplier) throws Throwable { throw (Throwable) supplier.get(); }


        @Override
        public String toString() { return "null"; }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy