@Contract(pure = true)
  default @NotNull OptionController onValue(@NotNull String bindId, @NotNull Supplier<@NotNull Object> getter) {
    return onValue(bindId, getter, (value) -> {
      if (value != getter.get()) {
        throw new UnsupportedOperationException("Setting value is not supported");
      }
    });
  }
@Contract(pure = true)
  default @NotNull OptionController onValue(@NotNull String bindId, @NotNull Supplier<@NotNull Object> getter)