code: @NullSafe
    public static AbstractRow of(Object[] values) {
  
      Object[] rowValues = ArrayUtils.nullSafeArray(values);
  
      return new AbstractRow() {
  
        @Override
        @SuppressWarnings("unchecked")
        public <T> T getValue(int columnIndex) {
          return (T) rowValues[columnIndex];
        }
  
        @Override
        @SuppressWarnings("unchecked")
        public <T> T setValue(int columnIndex, T value) {
  
          T currentValue = (T) rowValues[columnIndex];
  
          rowValues[columnIndex] = value;
  
          return currentValue;
        }
  
        @Override
        public Object[] values() {
          return rowValues;
        }
      };
    }
docs: Constructs a new {@link AbstractRow} initialized with given array of {@link Object values}
  used as {@link Object values} for each {@link Column} of the new {@link AbstractRow}.
  
  @param values array of {@link Object values} used as {@link Object values} for each {@link Column}
  of the new {@link AbstractRow}.
  @return a new {@link AbstractRow} initialized with the given array of {@link Object values}.