docs: @SuppressWarnings("unchecked")
  	public <T extends Value> T getField(int fieldNum, T target) {
  		// range check
  		if (fieldNum < 0 || fieldNum >= this.numFields) {
  			throw new IndexOutOfBoundsException();
  		}
  		if (target == null) {
  			throw new NullPointerException("The target object may not be null");
  		}
  		
  		// get offset and check for null
  		final int offset = this.offsets[fieldNum];
  		if (offset == NULL_INDICATOR_OFFSET) {
  			return null;
  		}
  		else if (offset == MODIFIED_INDICATOR_OFFSET) {
  			// value that has been set is new or modified
  			// bring the binary in sync so that the deserialization gives the correct result
  			return (T) this.writeFields[fieldNum];
  		}
  		
  		final int limit = offset + this.lengths[fieldNum];
  		deserialize(target, offset, limit, fieldNum);
  		return target;
  	}