Comment on CSR 8251991: Hex formatting and parsing utility

Roger Riggs roger.riggs at oracle.com
Mon Mar 15 18:49:50 UTC 2021


Hi,

The question about static vs instance methods was raised during the review.
At the time, my rationale for the current API is summarized in this email.
https://mail.openjdk.java.net/pipermail/core-libs-dev/2020-October/070317.html

It comes down to choosing one kind of consistency vs another.

I was/am looking for additional comments to weigh one or the other 
alternative.
I did receive one offline comment in support of static methods on the 
rationale of
convenience.

Regards, Roger


On 3/15/21 12:06 PM, Raffaello Giulietti wrote:
> Hi,
>
> the javadoc of most of the methods listed in my previous post below 
> reads:
>     "The delimiter, prefix, suffix, and uppercase parameters are not 
> used."
>
> As these eventually constitute the whole state of an instance of this 
> final class and as the state is not involved, it is possible to 
> declare the methods as static.
>
>
> If, for some reason, declaring the methods as static is not a choice, 
> the next best thing is to clarify that
> * HexFormat.of() always returns the same instance and thus
> * absent any other instance, the recommended idiom for invoking any of 
> the methods below is, for example,
>     HexFormat.of().isHexDigit('F')
> (because there are almost no additional costs wrt static methods.)
Note that HexFormat is specified as a value based class and
any statement related to identity is out of place.

Incidentally, its generally discouraged and can cause a warning when a 
static method is invoked using a reference.

>
> But I don't see a reason why they should be non-static. Just oversight?
>
>
> Greetings
> Raffaello
>
>
> On 2021-03-08 11:52, Raffaello Giulietti wrote:
>> Hello,
>>
>> it appears that all of the following API methods in [1] can be 
>> declared *static*, which makes them more useful in contexts where 
>> there's no instance of HexFormat available or none is desired.
>>
>> As 17 has not yet entered any formal phase, the change should be 
>> harmless.
>>
>>    public boolean isHexDigit(int);
>>    public int fromHexDigit(int);
>>    public int fromHexDigits(java.lang.CharSequence);
>>    public int fromHexDigits(java.lang.CharSequence, int, int);
>>    public long fromHexDigitsToLong(java.lang.CharSequence);
>>    public long fromHexDigitsToLong(java.lang.CharSequence, int, int);
>>
>> Greetings
>> Raffaello
>>
>> ----
>>
>> [1] https://bugs.openjdk.java.net/browse/JDK-8251991



More information about the core-libs-dev mailing list