RFR: 8279986: methods Math::asXExact for safely checked primitive casts [v2]
Raffaello Giulietti
duke at openjdk.java.net
Tue May 10 13:19:50 UTC 2022
On Tue, 10 May 2022 04:42:19 GMT, Joe Darcy <darcy at openjdk.org> wrote:
>> Raffaello Giulietti has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:
>>
>> - 8279986: methods Math::asXExact for safely checked primitive casts
>>
>> Merge branch 'master' into JDK-8279986
>> - 8279986: methods Math::asXExact for safely checked primitive casts
>>
>> Merge branch 'master' into JDK-8279986
>> - 8279986: methods Math::asXExact for safely checked primitive casts
>> - 8279986: methods Math::asXExact for safely checked primitive casts
>
> src/java.base/share/classes/java/lang/Math.java line 1578:
>
>> 1576: */
>> 1577: @ForceInline
>> 1578: public static long toUnsignedIntExact(long value) {
>
> Existing methods like Integer.parseUnsignedInt interpret the negative int values as positive values larger than MAX_INT. So if an int is not going to be returned here, I suggest a name like "toUnsignedIntRangeExact".
Returning a `long` is probably less error prone.
When the result is to be used in an `int` context, one simply has to add a `(int)` cast, as mandated by language, compiler and IDE.
On the other hand, if this method were to return an `int`, when using the result in a `long` context one has to remember masking it with `0xFFFF_FFFFL`. AFAIK, there's no compiler or IDE support for this.
The name `toUnsignedIntRangeExact` is certainly better.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8548
More information about the core-libs-dev
mailing list