protected <E extends Value> E as(Class<E> valueClass, ValueType vt) {
return as(valueClass, 1 << vt.ordinal());
}
protected <E extends Value> E as(Class<E> valueClass, int bitMask) {
if(this.getValueType() == null)
throw new MessageTypeException("This value points to nothing");
if(!this.getValueType().isTypeOf(bitMask))
throw new MessageTypeException(String.format("Expected %s, but %s", valueClass.getSimpleName(), this.getValueType()));
return valueClass.cast(this);
}