/** * Get a Value representation that will allow semantic comparison of values, rather than the literal comparison normally * performed by {@link #compareTo}. * * @return the Value that will perform semantic comparisons; never null */ default Value comparable() { if (this instanceof ComparableValue) return this; return new ComparableValue(this); }
static Value create(BigDecimal value) { return value == null ? NullValue.INSTANCE : new ComparableValue(value); }
static Value create(Long value) { return value == null ? NullValue.INSTANCE : new ComparableValue(value); }
static Value create(String value) { return value == null ? NullValue.INSTANCE : new ComparableValue(value); }
static Value create(Document value) { return value == null ? NullValue.INSTANCE : new ComparableValue(value); }
static Value create(Integer value) { return value == null ? NullValue.INSTANCE : new ComparableValue(value); }
static Value create(BigInteger value) { return value == null ? NullValue.INSTANCE : new ComparableValue(value); }
static Value create(Float value) { return value == null ? NullValue.INSTANCE : new ComparableValue(value); }
static Value create(Double value) { return value == null ? NullValue.INSTANCE : new ComparableValue(value); }
static Value create(Array value) { return value == null ? NullValue.INSTANCE : new ComparableValue(value); }
static Value create(long value) { return new ComparableValue(Long.valueOf(value)); }
static Value create(float value) { return new ComparableValue(Float.valueOf(value)); }
static Value create(double value) { return new ComparableValue(Double.valueOf(value)); }
static Value create(boolean value) { return new ComparableValue(Boolean.valueOf(value)); }
static Value create(int value) { return new ComparableValue(Integer.valueOf(value)); }
static Value create(Object value) { if (value instanceof Value) return (Value) value; if (!isValid(value)) { assert value != null; throw new IllegalArgumentException("Unexpected value " + value + "' of type " + value.getClass()); } return value == null ? NullValue.INSTANCE : new ComparableValue((Comparable<?>) value); }
@Override public Value clone() { if (isArray()) return new ComparableValue(asArray().clone()); if (isDocument()) return new ComparableValue(asDocument().clone()); // All other values are immutable ... return this; }
/** * Get a Value representation that will allow semantic comparison of values, rather than the literal comparison normally * performed by {@link #compareTo}. * * @return the Value that will perform semantic comparisons; never null */ default Value comparable() { if (this instanceof ComparableValue) return this; return new ComparableValue(this); }
static Value create(Object value) { if (value instanceof Value) return (Value) value; if (!isValid(value)) { assert value != null; throw new IllegalArgumentException("Unexpected value " + value + "' of type " + value.getClass()); } return value == null ? NullValue.INSTANCE : new ComparableValue((Comparable<?>) value); }
@Override public Value clone() { if (isArray()) return new ComparableValue(asArray().clone()); if (isDocument()) return new ComparableValue(asDocument().clone()); // All other values are immutable ... return this; }