<html><body><div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000"><div><br></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>"Brian Goetz" <brian.goetz@oracle.com><br><b>À: </b>"Guy Steele" <guy.steele@oracle.com><br><b>Cc: </b>"amber-spec-experts" <amber-spec-experts@openjdk.java.net><br><b>Envoyé: </b>Vendredi 24 Avril 2020 21:08:02<br><b>Objet: </b>Re: Possible records tweak<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;"><br>
    <blockquote cite="mid:CB6041FA-9D3E-4450-BAA7-25710B3447F4@oracle.com">
      <div>Not a bad idea, but here are two and a half alternatives we
        could consider:</div>
      <div><br class="">
      </div>
      <div>(1) Simply ban use of “this” within a compact constructor.
         This might seem like overkill, but it is very easy to explain:
        the keyword “this” is not available in a compact constructor,
        period.  Because the argument names shadow the field names, you
        don’t have access to the fields at all in a compact constructor.
         If you don’t like it, write a non-compact constructor.</div>
    </blockquote>
    <br>
    That's a nice clean way to do it, because under this (heh) model,
    `this` is useless -- can't read the fields (they're DU), can't write
    them (cause I say so), shouldn't call instance methods anyway
    (because the object is uninitilized and therefore may be in an
    invalid state), and you shouldn't pass `this` to alien code (because
    that undermines the final field guarantees of the JMM.)  So if its
    useless, just don't utter it.  </blockquote><div><br></div><div>It's bold but i like 'this' rule. Easy to explain, easy to remember.</div><div><br data-mce-bogus="1"></div><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;"><br>
    <br>
    (Which, in hindsight, might have been a good rule for _all_
    constructors, if there was another way to initialize the fields. 
    Surely would have eliminated much verifier complexity.)</blockquote><div><br></div><div>accessing to the identity hashcode or the current class inside a constructor is valid (i believe) but those are a corner cases.</div><div><br data-mce-bogus="1"></div><div>Rémi</div><div><br data-mce-bogus="1"></div></div></div></body></html>