<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>From: </b>"Ella Ananeva" <ella.ananeva@oracle.com><br><b>To: </b>"amber-dev" <amber-dev@openjdk.org><br><b>Sent: </b>Wednesday, June 5, 2024 8:45:57 PM<br><b>Subject: </b>This expression in lambda in early construction context<br></blockquote></div><div><style><!--
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Aptos;
panose-1:2 11 0 4 2 2 2 2 2 4;}
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Aptos",sans-serif;
mso-ligatures:standardcontextual;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:11.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style></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;">
<div class="WordSection1">
<p class="MsoNormal">Hi,</p>
<p class="MsoNormal">I understand that JEP 482 allows to refer to <span style="font-family:"Courier New"">
this</span> in the early construction context if this expression is in the left part of an assignment expression:</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><span style="font-family:"Courier New"">class Test {</span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> int a;</span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> Test() {</span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> this.a = 1;</span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> super();</span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> }</span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">}</span></p>
<p class="MsoNormal">This compiles just fine (I have JDK 23 build 25).</p>
<p class="MsoNormal">However, when I try to do the same in a lambda body, I get a compilation error:</p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;font-family:"Courier New";color:#0033B3;mso-ligatures:none">interface
</span><span style="font-size:10.0pt;font-family:"Courier New";color:black;mso-ligatures:none">Foo
</span><span style="font-size:10.0pt;font-family:"Courier New";color:#080808;mso-ligatures:none">{<br></span><span style="font-size:10.0pt;font-family:"Courier New";color:#0033B3;mso-ligatures:none">void
</span><span style="font-size:10.0pt;font-family:"Courier New";color:#00627A;mso-ligatures:none">foo</span><span style="font-size:10.0pt;font-family:"Courier New";color:#080808;mso-ligatures:none">();<br>
}<br><br></span><span style="font-size:10.0pt;font-family:"Courier New";color:#0033B3;mso-ligatures:none">class
</span><span style="font-size:10.0pt;font-family:"Courier New";color:black;mso-ligatures:none">Test
</span><span style="font-size:10.0pt;font-family:"Courier New";color:#080808;mso-ligatures:none">{<br></span><span style="font-size:10.0pt;font-family:"Courier New";color:#0033B3;mso-ligatures:none">int
</span><span style="font-size:10.0pt;font-family:"Courier New";color:#871094;mso-ligatures:none">a</span><span style="font-size:10.0pt;font-family:"Courier New";color:#080808;mso-ligatures:none">;<br><br></span><span style="font-size:10.0pt;font-family:"Courier New";color:#00627A;mso-ligatures:none">Test</span><span style="font-size:10.0pt;font-family:"Courier New";color:#080808;mso-ligatures:none">() {<br></span><span style="font-size:10.0pt;font-family:"Courier New";color:black;mso-ligatures:none">Foo lmb
</span><span style="font-size:10.0pt;font-family:"Courier New";color:#080808;mso-ligatures:none">= () -> {
</span><span style="font-size:10.0pt;font-family:"Courier New";color:#0033B3;mso-ligatures:none">this</span><span style="font-size:10.0pt;font-family:"Courier New";color:#080808;mso-ligatures:none">.a =
</span><span style="font-size:10.0pt;font-family:"Courier New";color:#1750EB;mso-ligatures:none">1</span><span style="font-size:10.0pt;font-family:"Courier New";color:#080808;mso-ligatures:none">;};<br></span><span style="font-size:10.0pt;font-family:"Courier New";color:#0033B3;mso-ligatures:none">super</span><span style="font-size:10.0pt;font-family:"Courier New";color:#080808;mso-ligatures:none">();<br>
}<br>
}</span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Test.java:9:27</span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">java: cannot reference this before supertype constructor has been called</span></p>
<p class="MsoNormal">Is lambda body some special case? </p></div></blockquote><div><br></div><div>The lambda capture "this" (it is a parameter of the call to the construction of the lambda), but "this" as a value is only available after the call to the super constructor.</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;"><div class="WordSection1">
<p class="MsoNormal"> </p>
<p class="MsoNormal">Thank you,</p>
<p class="MsoNormal">Ella Ananeva</p>
</div></blockquote><div><br></div><div>regards,<br data-mce-bogus="1"></div><div>Rémi<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div></div></div></body></html>