Hi,

Also, Null checks in the VM are very cheap, likely cheaper than a virtual dispatch. Adding calls to requireNonNull is almost always a no-op, except for adding a variable name to the exception it still throws NPE. A frequently used class like Optional will be compiled to machine code and the number of byte codes is not an important metric.

Regardless, Project Valhalla will be converting and optimizing Optional to a value class as the project matures.

Thanks, Roger


On 8/23/23 11:56 AM, Remi Forax wrote:
Sorry, you can not do that.
Optional is a value based class [1] (see the javadoc) so the class has to be final.

And more generally, the API of a classes of OpenJDK will not change based on some stylistic issue, OOP or not.

regards,
Rémi Forax

[1] https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/lang/doc-files/ValueBased.html


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

    *From: *"Oleksii Kucheruk" <iselo+open...@raccoons.co>
    *To: *"core-libs-dev" <core-libs-dev@openjdk.org>
    *Sent: *Wednesday, August 23, 2023 4:43:17 PM
    *Subject: *RFE: Refactor java.util.Optional and add NonNull checks

    Hi there.
    I have found that `java.util.Optional` is written procedural style
    and has `ifnonnull`  checks in each method. I propose to refactor
    `Optional` in accordance to OOP-style. This will eliminates all
    unnecessary `if`-statements, removes duplications and reduces
    bytecode size more then twice.

    I have two solutions:
    1. Completely dynamic that avoids single static `EMPTY` instance
    and unchecked casting of each `Optional.empty()`
    2. Preserving original single static `EMPTY` per VM.

    Also there are couple methods that throws NPE due to calling
    methods on null-objects and requires to add
    `Objects.requireNonNull(...)`.

    OptionalInt, OptionalDouble, OptionalLong could be refactored same
    way even with remove of additional boolean variable `isPresent`.

    Since I'm new here any guidance will be helpful.
    Thank you in advance.

Reply via email to