Walked away. Pondered. Came back.

s/Param/Option on the below. A Parameter is a user supplied value; an
Option is a user supplied choice. I'm talking about the latter.

On Sun, Oct 18, 2009 at 1:21 PM, Henri Yandell <flame...@gmail.com> wrote:
> Which ended up looking like:
>
>    public static enum PARAM { escapePlus };
>
>    private EnumSet<PARAM> params;
>
>    public UnicodeUnescaper(PARAM... params) {
>        if(params.length > 0) {
>            this.params = EnumSet.copyOf(Arrays.asList(params));
>        }
>    }
>
>    public boolean isSet(PARAM p) {
>        return (params == null) ? false : params.contains(p);
>    }
>
> Opinions very, very much desired. Tempted to extend EnumSet to
> simplify a little of the null protection etc. ParamSet<P> and
> protecting against empty arrays and null params. Maybe looking like:
>
>    public static enum PARAM { escapePlus };
>
>    private ParamSet<PARAM> params = new ParamSet<PARAM>();
>
>    public UnicodeUnescaper(PARAM... parameters) {
>            this.params.add(parameters);
>    }
>
>    public boolean isSet(PARAM p) {
>        return params.contains(p);
>    }
>
> To a user this looks like:
>
>        uu = new UnicodeUnescaper(UnicodeUnescaper.PARAM.escapePlus);
>
> with the advantage for us being that we can add options to a class
> without API problems.
>
> Hen
>
> On Sun, Oct 18, 2009 at 1:04 PM, Henri Yandell <flame...@gmail.com> wrote:
>> On Sun, Oct 18, 2009 at 12:49 PM, Henri Yandell <flame...@gmail.com> wrote:
>>
>>> Fair enough on the threading though. I'll move to constructor as I
>>> can't think of anything better.
>>
>> Rambling out loud.
>>
>> Better (for API scaling):
>>
>> enum FooParam { various PARAM options}
>>
>> constructor:  Foo(FooParam... fp) {  this.options =
>> EnumSet.copyOf(Collections.asList(fp)); }
>>
>> That would work quite nicely to replace all the painful boolean
>> constructor parameters. That leaves us then needing a way to scale
>> this for a single initial parameter:
>>
>> With a recompile, you could have an Object called PARAM and replace it
>> with a FooParam.PARAM later on of type enum:FooParam, but I'm assuming
>> that would be an error at runtime. So for runtime API scaling you
>> would need to set the enum up from the start. Ideally it wants to be
>> in the same class/file though, which means an inner class so you can
>> make it public. So:
>>
>> new Foo(Foo.PARAM.escapingPlus)
>>
>> You could also have a single argument constructor to start with, but
>> again runtime is probably unhappy when you switch (or overload -
>> compile error?) with varargs.
>>
>> Is it a worthwhile pattern to avoid rampant booleanism in a minority
>> of classes? Not convinced.
>>
>> Hen
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to