Optional.java

AKL City ยท akl-city.git

Branches > main > 3f7228d > files / src / main / java / dev / grahp / option / Optional.java

package dev.grahp.option;

import java.lang.RuntimeException;

// Make IBox and make this Box to avoid name collision
public class Optional<T> implements Box {
  private final T value;
  public final boolean present;

  public Optional() {
    present = false;
    value = null;
  }

  public Optional(T value) {
    this.value = value;
    present = true;
  }

  @Override
  public T val() {
    if (present) {
      return value;
    } else {
      throw new RuntimeException("Tried to unbox an empty box!");
    }
  }

  // public R with(Function<T, R> f) {
  //   if (present) {
  //     return f.apply(value);
  //   }
  // }

  @Override
  public String toString() {
    return present ? "Optional[" + value.toString() + "]"
                   : "Optional[]";
  }
}