google / guava

Google core libraries for Java
Apache License 2.0
49.91k stars 10.83k forks source link

Suppliers.memoize should return a MemoizingSupplier with isMemoized() #7292

Open alexey-pelykh opened 1 month ago

alexey-pelykh commented 1 month ago

API(s)

`com.google.common.base.Suppliers::memoize`

How do you want it to be improved?

Get memoizing supplier state without causing memoization

Why do we need it to be improved?

To check the memoizing supplier state without changing it

Example

N/A as there's no such feature

Current Behavior

MemoizingSupplier::initialized is not exposed

Desired Behavior

MemoizingSupplier::initialized is exposed

Concrete Use Cases

e.g. in toString() of a class that needs to print a memoized supplier value without causing the memoization

Checklist

cgdecker commented 1 month ago

e.g. in toString() of a class that needs to print a memoized supplier value without causing the memoization

Does the default toString() of the memoizing supplier not work for you? It doesn't trigger the memoization if it hasn't occurred yet.

My inclination is that this is niche enough that I'd suggest just writing your own, perhaps even wrapping a single-element LoadingCache or something.

alexey-pelykh commented 1 month ago

While toString() use-case could be mitigated, I fail to see how exposing a property that's already there can be harmful. Currently I have to resort to using Apache Commons because there's LazyInitializer.html#isInitialized - however I find it's usage bulky in comparison to MemoizingSupplier.