package akin.lang; /** Object storing a Java value, usualy a literal (String, Integer, Float, nil, true, false). */ public class ValueObject extends AkinObject { private Object value; public ValueObject(AkinClass klass, Object value) { super(klass); this.value = value; } public ValueObject(String value) { super("String"); this.value = value; } public ValueObject(Integer value) { super("Integer"); this.value = value; } public ValueObject(Float value) { super("Float"); this.value = value; } public ValueObject(Object value) { super("Object"); this.value = value; } /** Returns the Java value of this object. */ @Override public Object toJavaObject() { return value; } /** Only nil and false are false. */ @Override public boolean isFalse() { return value == (Object)false || isNil(); } /** Only nil is nil. */ @Override public boolean isNil() { return value == null; } public Object getValue() { return value; } /** Cast the value to clazz or throw a TypeError if unexpected type. */ public <T> T getValueAs(Class<T> clazz) throws TypeError { if (clazz.isInstance(value)){ return clazz.cast(value); } throw new TypeError(clazz.getName(), value); } }