commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: [Math] Confusing (?) use of "getInstance()" in formatting classes
Date Tue, 26 Jul 2011 13:43:58 GMT
On 26 July 2011 14:40, Gilles Sadowski <gilles@harfang.homelinux.org> wrote:
> On Tue, Jul 26, 2011 at 02:00:39PM +0100, sebb wrote:
>> On 26 July 2011 13:19, Gilles Sadowski <gilles@harfang.homelinux.org> wrote:
>> > Hi.
>> >
>> > [This is related to issue MATH-622.]
>> >
>> > Looking at the "CompositeFormat" and "RealVectorFormat", I notice an unusual
>> > use of the "getInstance" method name. Unless I'm mistaken, "getInstance" is
>> > most often used when the object stores a reference to a singleton. And in
>> > those class, this does not seem to be the case: When I write
>> > ---
>> >  RealVectorFormat.getInstance().getFormat().setMaximumFractionDigits(6);
>> > ---
>> > the output is unaffected, the default being to display 2 fraction digits),
>> > which is not suitable for debugging.
>> >
>> > I think that there should be a way to modify at once all outputs formatted
>> > through "CompositeFormat", i.e. an actual singleton instance of "NumberFormat"
>> > that is used by all "default" formatting.
>> >
>> > Do you agree? Any caveats?
>>
>> The singleton will need to be thread-safe.
>>
>> A mutable singleton is thread-hostile (*), so if this approach is
>> taken, the Javadoc need to make this very clear.
>
> I don't particularly like it either but do you see another way?

Yes - create the singleton once, with the required settings.

> Yes, there is: To not use CM's formatting in the definition of the
> "toString()" methods and/or overload them as
> ---
>  public String toString(NumberFormat fmt) { /* ... */ }
> ---
> Then when debugging, one will be able to fairly easily write:
> ---
>   RealVector v = new ArrayRealVector(new double[] {1.2345678, 2.3456789});
>   System.out.println("v=" + v.toString(CompositeFormat.getDefaultNumberFormat(8)));
> ---
>
>> (*) Thread A sets the digit count, thread B sets it differently;
>> thread A may not get the desired digit count.
>
> For debugging, the expectation is that the user sets it once, at the
> top-level ("main"); so that will not be a problem usually.

Yes, but my point is that the user needs to made aware of this.

>
> Gilles
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>

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


Mime
View raw message