public static <T> Value<T> of(T value) { return wrap(new SimpleValueStore<>(value)); }
@Override public void set(T value) { store(value); }
@Override public Value<String> str() { return to(String.class); }
@Override protected void store(T value) { store.set(value); }
@Override public String desc() { return store.desc(); } }
@Override public boolean exists() { return getOrNull() != null; }
@Override protected T retrieve() { return store.get(); }
@Override public T getOrNull() { return retrieve(); }
@Override public String desc() { return src.desc(); }
public static <T> Value<T> wrap(ValueStore<T> store) { return new StoredValue<>(store); }
public static Value<String> none() { return of(null); }
@Override public Value<T> orElse(Value<T> alternative) { U.notNull(alternative, "alternative"); return new OrValue<>(this, alternative); }
@Override public <K> Value<K> to(Class<K> type) { U.notNull(type, "type"); return new ToValue<>(this, type); }
@Override public Value<Object> entry(String key) { return primary.entry(key).orElse(alternative.entry(key)); }
@Override protected T retrieve() { return Cls.convert(src.getOrNull(), type); }
@Override public Value<Boolean> bool() { return to(boolean.class); }
@Override public Value<Long> num() { return to(long.class); }