RFR: 5023614: UUID needs methods to get most/leastSigBits and write to DataOutput [v2]

Alan Bateman alanb at openjdk.java.net
Thu Nov 26 19:03:08 UTC 2020


On Thu, 26 Nov 2020 18:59:57 GMT, Richard Fussenegger <github.com+1059453+Fleshgrinder at openjdk.org> wrote:

>> Made byte constructor public and changed the length assertion to an `IllegalArgumentException`, added a `getBytes` method that allows users to retrieve the raw bytes of the UUID, and created a new private constructor with an optimized construction for byte arrays that can set the version as desired and the variant to RFC 4122. Also changed the existing static factory methods to use the new constructor and removed the duplicate code from them where the variant and version is being set.
>> 
>> Report [5023614](https://bugs.java.com/bugdatabase/view_bug.do?bug_id=5023614) asks for more than what I provided and with different names. However, I believe that there is no value in providing methods to deal with `DataInput` and `DataOutput` because they would only encapsulate single method calls that the caller can directly write as well (e.g. `output.write(uuid.getBytes())` vs `uuid.write(output)`). Hence, I consider this change to satisfy the feature request.
>
> Richard Fussenegger has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:
> 
>   5023614: UUID needs methods to get most/leastSigBits and write to DataOutput
>   
>   Made byte constructor public and changed the length assertion to an `IllegalArgumentException`, added a `getBytes` method that allows users to retrieve the raw bytes of the UUID, and created a new private constructor with an optimized construction for byte arrays that can set the version as desired and the variant to RFC 4122. Also changed the existing static factory methods to use the new constructor and removed the duplicate code from them where the variant and version is being set. Report [5023614](https://bugs.java.com/bugdatabase/view_bug.do?bug_id=5023614) asks for more than what I provided and with different names. However, I believe that there is no value in providing methods to deal with `DataInput` and `DataOutput` because they would only encapsulate single method calls that the caller can directly write as well (e.g. `output.write(uuid.getBytes())` vs `uuid.write(output)`). Hence, I consider this change to satisfy the feature request.

src/java.base/share/classes/java/util/UUID.java line 151:

> 149:      * @throws IllegalArgumentException if {@code bytes} is not of length 16.
> 150:      * @since 16
> 151:      */

I think you need to agreement first on whether to add this API. Maybe there is a case for a new factory method rather than a constructor? Are there any concerns with creating UUIDs with random bytes.

If it goes ahead then I assume the the javadoc will need a bit of work to specify how the byte[] is mapped to the 128-bit value.

You might need to tweak a few other things like the javadoc styles and coding style to get it consistent with the existing code. That's for later.

-------------

PR: https://git.openjdk.java.net/jdk/pull/1465


More information about the core-libs-dev mailing list