code: public static Key of(Object... values) {
      // A literal Key.of(null) results in a null array being passed.  Provide a clearer error.
      checkNotNull(
          values,
          "'values' cannot be null.  For a literal key containing a single null value, "
              + "call Key.of((Object) null).");
      Builder b = new Builder(false /* builder never leaves this scope */);
      for (Object value : values) {
        b.appendObject(value);
      }
      return b.build();
    }
docs: Construct a key with parts specified by {@code values}. Each object in {@code values} must be
  either {@code null} or one of the following supported types:
  
  <ul>
  <li>{@code Boolean} for the {@code BOOL} Cloud Spanner type
  <li>{@code Integer}, {@code Long} for {@code INT64}
  <li>{@code Float}, {@code Double} for {@code FLOAT64}
  <li>{@code String} for {@code STRING}
  <li>{@link ByteArray} for {@code BYTES}
  </ul>
  
  @throws IllegalArgumentException if any member of {@code values} is not a supported type