Dhanji R. Prasanna wrote:
>
>
> On 8/31/07, *Marc Hadley* <Marc.Hadley_at_sun.com
> <mailto:Marc.Hadley_at_sun.com>> wrote:
>
>
>
> (ii) UriBuilder state after a call to .build(...)
>
> Should the state be maintained after a call to build or should the
> builder be reset back to blank state ?
>
>
> Hmm, should it be idempotent on multiple invocations of build()? I like
> the idea that one can make some small changes and reuse the builder...
>
Me too. It can be more efficient, for example:
UriBuilder ub = UriBuilder.fromUri(URI.create("
http://host/"));
URI u1 = ub.path("p1").build(); // "
http://host/p1"
URI u2 = ub.path("p2").build(); // "
http://host/p1/p2"
rather than:
URI u1 = UriBuilder.fromUri(URI.create("
http://host/")).
path("p1").build();
URI u2 = UriBuilder.fromUri(u1).path("p2").build();
> Response.Builder.build resets
> the state to blank to avoid a deep-copy of the builder contents to
> prevent subsequent modifications from affecting the returned
> Response.
>
>
> Instead I think it should just return an immutable response (private
> final fields).
The Response interface does not allow any direct modification of the
response state.
> I am not sure about entity references, if a user holds
> onto one and mutates it that is a risk that should be documented clearly
> (better to avoid deep copy as you say).
>
I guess we could say that the a Response instance can can only reliably
created and held for the scope of a request/response cycle. Beyond that
scope it's behavior is undefined and is application-specific whether it
can be reused or not.
Paul.
--
| ? + ? = To question
----------------\
Paul Sandoz
x38109
+33-4-76188109