code: @SuppressWarnings("unchecked")
  	public static <T> ValueArray<T> createValueArray(Class<? extends Value> cls) {
  		if (ByteValue.class.isAssignableFrom(cls)) {
  			return (ValueArray<T>) new ByteValueArray();
  		} else if (CharValue.class.isAssignableFrom(cls)) {
  			return (ValueArray<T>) new CharValueArray();
  		} else if (DoubleValue.class.isAssignableFrom(cls)) {
  			return (ValueArray<T>) new DoubleValueArray();
  		} else if (FloatValue.class.isAssignableFrom(cls)) {
  			return (ValueArray<T>) new FloatValueArray();
  		} else if (IntValue.class.isAssignableFrom(cls)) {
  			return (ValueArray<T>) new IntValueArray();
  		} else if (LongValue.class.isAssignableFrom(cls)) {
  			return (ValueArray<T>) new LongValueArray();
  		} else if (NullValue.class.isAssignableFrom(cls)) {
  			return (ValueArray<T>) new NullValueArray();
  		} else if (ShortValue.class.isAssignableFrom(cls)) {
  			return (ValueArray<T>) new ShortValueArray();
  		} else if (StringValue.class.isAssignableFrom(cls)) {
  			return (ValueArray<T>) new StringValueArray();
  		} else {
  			throw new IllegalArgumentException("Unable to create unbounded ValueArray for type " + cls);
  		}
  	}
docs: Produce a {@code ValueArray} for the given {@code Value} type.
  
  @param cls {@code Value} class
  @return {@code ValueArray} for given {@code Value} class