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