Fwd: [External] : Re: Feedback about LazyConstants API (JEP526)
Red IO
redio.development at gmail.com
Tue Dec 9 13:36:09 UTC 2025
Missed the CC
---------- Forwarded message ---------
From: Red IO <redio.development at gmail.com>
Date: Tue, Dec 9, 2025, 14:34
Subject: Re: [External] : Re: Feedback about LazyConstants API (JEP526)
To: Anatoly Kupriyanov <kan.izh at gmail.com>
I initially thought I agree with your statement that orElse is a common
pattern in the jdk. But then I failed to come up with a second example. I
then searched the jdk github repo for the method. And I only found Optional
and it's specializations and ClassHierarchyResolver.
So I would suggest yes, it's an often used method ... of the Optional
class. Not many apis seem to expose it. The case of exposing an accessor
that returns an Optional on the other hand is incredibly common across the
jdk. This is exactly the case Optional was designed for. In this sense
Optional is the "Interface" you are suggesting.
My main argument against reusing orElse here is that the context is a
completely different one.
An Optional orElse method is a pure function that always returns the same
value. It signals that the value is not there.
LazyConstant is different in this regard. The LazyConstant orElse is not
pure at all. It depends on rather someone else already initialized the
value or not. It signals that the value is not there YET.
Great regards
RedIODev
On Tue, Dec 9, 2025, 13:51 Anatoly Kupriyanov <kan.izh at gmail.com> wrote:
> Right, the ScopedValue is another good example I've forgotten. In that
> case I am even more inclined to keep the `orElse` as it looks like a
> repeating pattern across JDK libraries. Consistency is the way to go!
> And maybe even consider having a new interface for the method to make this
> pattern explicit?..
>
> I am glad that `orElseSet` is removed, the side-effecting is bad; also in
> other parts of JDK we already have `computeIfAbsent` for the same idea. I
> did not hear about it, and yeah, sounds like the source of this confusion.
>
>
> On Tue, 9 Dec 2025 at 12:05, Maurizio Cimadamore <
> maurizio.cimadamore at oracle.com> wrote:
>
>>
>> On 09/12/2025 11:59, Anatoly Kupriyanov wrote:
>> > To be honest, I don't really see why this method causes such confusion.
>>
>> In part I agree. E.g. when we added this, what we had in mind was just
>>
>>
>> https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/ScopedValue.html#orElse(T)
>>
>> E.g. other APIs have `orElse` method that return a user-provided value
>> if some condition isn't met.
>>
>> I believe the problem we're discussing here is likely also related to
>> the fact that the API used to have a side-effecting `orElseSet`, which
>> is now removed, and I wonder if, because of that, folks are reading too
>> much into what orElse does?
>>
>> Maurizio
>>
>>
>
> --
> WBR, Anatoly.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20251209/e120e5c0/attachment.htm>
More information about the amber-dev
mailing list