ValBack.java
package space.sunqian.common.base.value;
import space.sunqian.annotations.Nonnull;
final class ValBack {
static final @Nonnull Val<?> OF_NULL = of(null);
static final @Nonnull BooleanVal OF_TRUE = of(true);
static final @Nonnull BooleanVal OF_FALSE = of(false);
static final @Nonnull ByteVal OF_ZERO_BYTE = of((byte) 0);
static final @Nonnull ShortVal OF_ZERO_SHORT = of((short) 0);
static final @Nonnull CharVal OF_ZERO_CHAR = of('0');
static final @Nonnull IntVal OF_ZERO_INT = of(0);
static final @Nonnull LongVal OF_ZERO_LONG = ValBack.of(0L);
static final @Nonnull FloatVal OF_ZERO_FLOAT = ValBack.of(0.0f);
static final @Nonnull DoubleVal OF_ZERO_DOUBLE = ValBack.of(0.0);
static <T> @Nonnull Val<T> of(T value) {
return new ValImpl<>(value);
}
static @Nonnull BooleanVal of(boolean value) {
return new BooleanValImpl(value);
}
static @Nonnull ByteVal of(byte value) {
return new ByteValImpl(value);
}
static @Nonnull ShortVal of(short value) {
return new ShortValImpl(value);
}
static @Nonnull CharVal of(char value) {
return new CharValImpl(value);
}
static @Nonnull IntVal of(int value) {
return new IntValImpl(value);
}
static @Nonnull LongVal of(long value) {
return new LongValImpl(value);
}
static @Nonnull FloatVal of(float value) {
return new FloatValImpl(value);
}
static @Nonnull DoubleVal of(double value) {
return new DoubleValImpl(value);
}
private static final class ValImpl<T> implements Val<T> {
private final T value;
private ValImpl(T value) {
this.value = value;
}
@Override
public T get() {
return value;
}
}
private static final class BooleanValImpl implements BooleanVal {
private final boolean value;
private BooleanValImpl(boolean value) {
this.value = value;
}
@Override
public boolean get() {
return value;
}
}
private static final class ByteValImpl implements ByteVal {
private final byte value;
private ByteValImpl(byte value) {
this.value = value;
}
@Override
public byte get() {
return value;
}
}
private static final class ShortValImpl implements ShortVal {
private final short value;
private ShortValImpl(short value) {
this.value = value;
}
@Override
public short get() {
return value;
}
}
private static final class CharValImpl implements CharVal {
private final char value;
private CharValImpl(char value) {
this.value = value;
}
@Override
public char get() {
return value;
}
}
private static final class IntValImpl implements IntVal {
private final int value;
private IntValImpl(int value) {
this.value = value;
}
@Override
public int get() {
return value;
}
}
private static final class LongValImpl implements LongVal {
private final long value;
private LongValImpl(long value) {
this.value = value;
}
@Override
public long get() {
return value;
}
}
private static final class FloatValImpl implements FloatVal {
private final float value;
private FloatValImpl(float value) {
this.value = value;
}
@Override
public float get() {
return value;
}
}
private static final class DoubleValImpl implements DoubleVal {
private final double value;
private DoubleValImpl(double value) {
this.value = value;
}
@Override
public double get() {
return value;
}
}
private ValBack() {
}
}