<html><body><div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000"><div>To complement what Joe said,<br></div><div>Java has chosen to provides a library solution, java.util.Optional, instead of a new language construct.<br></div><div><br data-mce-bogus="1"></div><div>so if each of foo(), bar() and baz returns an Optional, you can write:</div><div>  foo().flatMap(Main::bar).flatMap(Main::baz)<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>The elvis operator works great in a language that tracks nullability like in Kotlin, because if you fail to take care of the possible null, the compiler emits an error.<br data-mce-bogus="1"></div><div>The Java type system doesn't track null, introducing the elvis operator will only creates more NPE because the compiler will not fail if you don't use the elvis operator when needed.</div><div>That why we have chosen Optional, because it forces you to deal with the fact that the result may not exist.<br></div><div><br data-mce-bogus="1"></div><div>The major drawback of Optional is that people are using it not only as a return type but as a type of a field or in a List, a Map, etc, where it makes no sense but that's another story :)<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>regards,<br data-mce-bogus="1"></div><div>Rémi<br data-mce-bogus="1"></div><div><br></div><hr id="zwchr" data-marker="__DIVIDER__"><div data-marker="__HEADERS__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>De: </b>"joe darcy" <joe.darcy@oracle.com><br><b>À: </b>"Janis Schöck" <janis@schoeck-netz.de>, "compiler-dev" <compiler-dev@openjdk.java.net><br><b>Envoyé: </b>Mardi 9 Juillet 2019 23:41:59<br><b>Objet: </b>Re: Null-safe navigation operator (and elvis operator)<br></blockquote></div><div data-marker="__QUOTED_TEXT__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><p>Hello Janis,</p>
    <p>We've been aware of the null safe navigator operator, sometimes
      referred to as the Elvis operator, no later than the Project Coin
      call for proposals back in February 2009:</p>
    <p>   
      <a class="moz-txt-link-freetext" href="https://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html" target="_blank">https://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html</a><br data-mce-bogus="1"></p>
    <p>To date, we have chosen not to pursue this change.</p>
    <p>Cheers,<br>
    </p>
    <p>-Joe<br>
    </p>
    <div class="moz-cite-prefix">On 7/9/2019 6:08 AM, Janis Schöck
      wrote:<br>
    </div>
    <blockquote cite="mid:be27e8b9-0db1-f632-87e0-e6ef872aaaf5@schoeck-netz.de">
      
      <p>Hello compiler-dev List,</p>
      <p>I am trying to assert, whether my idea (which is not actually
        original it appears) is valuable for Java.<br>
        Apparently kotlin already features the following (null safe
        navigation operator):</p>
      <pre><span class="c1">// returns null if...</span>
<span class="c1">// - foo() returns null,</span>
<span class="c1">// - or if foo() is non-null, but bar() returns null,</span>
<span class="c1">// - or if foo() and bar() are non-null, but baz() returns null.</span>
<span class="c1">// vice versa, return value is non-null if and only if foo(), bar() and baz() are non-null</span>
<span class="n">foo</span><span class="p">()</span><span class="o">?.</span><span class="n">bar</span><span class="p">()</span><span class="o">?.</span><span class="n">baz</span><span class="p">()

</span></pre>
      <p>In that same context, if an expression would evaluate to null,
        but a primitive type is required, kotlin can<br>
        fall back on a default, or evaluate an alternate expression.<br>
      </p>
      <pre><span class="k">val</span> <span class="py">name</span><span class="p">:</span> <span class="n">String</span> <span class="p">=</span> <span class="n">maybe</span> <span class="o">?:</span> <span class="s">"stranger"</span></pre>
      <p>Independently of kotlin, I think null safe accessing seems to
        be a valuable language feature. Since I did not<br>
        know kotlin had this when I started, I put it into a JEP/JSR
        format to collect feedback on. Since I am new to<br>
        this list, maybe the primary question: Do I just write up the
        entire JEP-plain text here, or will this just bother<br>
        people, as it is a lot of text, and probably will mess up bulked
        mails?</p>
      <p>Secondary question: Is this the correct list to write to, or is
        this better addressed at the amber-project list?</p>
      <p>Thank you in advance,<br>
        Janis Schöck<br>
      </p>
      <pre><span class="p"></span></pre>
    </blockquote><br></blockquote></div></div></body></html>