code: public static double[] toArray(Collection<? extends Number> collection) {
      if (collection instanceof DoubleArrayAsList) {
        return ((DoubleArrayAsList) collection).toDoubleArray();
      }
  
      Object[] boxedArray = collection.toArray();
      int len = boxedArray.length;
      double[] array = new double[len];
      for (int i = 0; i < len; i++) {
        // checkNotNull for GWT (do not optimize)
        array[i] = ((Number) checkNotNull(boxedArray[i])).doubleValue();
      }
      return array;
    }
docs: Returns an array containing each value of {@code collection}, converted to a {@code double}
  value in the manner of {@link Number#doubleValue}.
  
  <p>Elements are copied from the argument collection as if by {@code collection.toArray()}.
  Calling this method is as thread-safe as calling that method.
  
  @param collection a collection of {@code Number} instances
  @return an array containing the same values as {@code collection}, in the same order, converted
  to primitives
  @throws NullPointerException if {@code collection} or any of its elements is null
  @since 1.0 (parameter was {@code Collection<Double>} before 12.0)