<div dir="auto">Now that pattern matching is nearly complete I was thinking about the distinction how the option type of the jdk works.<div dir="auto">What I'm talking about is the split between checking if it's empty and retrieving the value.</div><div dir="auto">Sure there are ways to transform the optional and GetOrElse and Throw varients. But none of them express the connection between isPresent and get:</div><div dir="auto">var option = Optional.of("Foo");</div><div dir="auto">if (option.isPresent()) {</div><div dir="auto"><span style="white-space:pre">  </span>var foo = option.get(); </div><div dir="auto">} </div><div dir="auto">Now pattern matching comes into play. A great solution that is used by many other languages to deal with the option type is matching rather or not it's present and in the same step providing the value to the valid code block. Something like this:</div><div dir="auto">var option = Optional.of("Foo");</div><div dir="auto">switch(option) {</div><div dir="auto"><span style="white-space:pre"> </span>case Some(foo) -> {} </div><div dir="auto"><span style="white-space:pre">        </span>case None() -> {} </div><div dir="auto">} </div><div dir="auto">Or </div><div dir="auto">if(option instanceof Some(foo) {</div><div dir="auto"><br></div><div dir="auto">} </div><div dir="auto"><br></div><div dir="auto">This is indeed possible in the current version of java using sealed types, records and pattern matching.</div><div dir="auto">Now it's sad that Optional was introduced before the features we have now where available and introducing a second option type would be confusing and terrible for apis.</div><div dir="auto"><br></div><div dir="auto">But I don't think all hope is lost yet. I'm not too familiar with binary compatibility but from an api standpoint it would not change the public api of optional if it was turned from a final class into a sealed interface with 2 inner records representing the 2 states of the Optional instead of a nullable field. This way the public api of optional would just be added 2 inner types and otherwise stay the same. </div><div dir="auto"><br></div><div dir="auto">I would love to hear your feedback on this one.</div><div dir="auto"><br></div><div dir="auto">Great regards </div><div dir="auto">RedIODev </div></div>