function URI(
    rawScheme,
    rawCredentials, rawDomain, port,
    rawPath, rawQuery, rawFragment) {
  this.scheme_ = rawScheme;
  this.credentials_ = rawCredentials;
  this.domain_ = rawDomain;
  this.port_ = port;
  this.path_ = rawPath;
  this.query_ = rawQuery;
  this.fragment_ = rawFragment;
  /**
   * @type {Array|null}
   */
  this.paramCache_ = null;
}
a mutable URI.

This class contains setters and getters for the parts of the URI.
The <tt>getXYZ</tt>/<tt>setXYZ</tt> methods return the decoded part -- so
<code>uri.parse('/foo%20bar').getPath()</code> will return the decoded path,
<tt>/foo bar</tt>.

<p>The raw versions of fields are available too.
<code>uri.parse('/foo%20bar').getRawPath()</code> will return the raw path,
<tt>/foo%20bar</tt>.  Use the raw setters with care, since
<code>URI::toString</code> is not guaranteed to return a valid url if a
raw setter was used.

<p>All setters return <tt>this</tt> and so may be chained, a la
<code>uri.parse('/foo').setFragment('part').toString()</code>.

<p>You should not use this constructor directly -- please prefer the factory
functions {@link uri.parse}, {@link uri.create}, {@link uri.resolve}
instead.</p>

<p>The parameters are all raw (assumed to be properly escaped) parts, and
any (but not all) may be null.  Undefined is not allowed.</p>

@constructor