<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>"Heinzl, Steffen" <steffen.heinzl@fhws.de><br><b>To: </b>"amber-dev" <amber-dev@openjdk.org><br><b>Sent: </b>Tuesday, November 22, 2022 10:25:20 PM<br><b>Subject: </b>Another syntax for Java records<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:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}

p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
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"> </p>
<p class="MsoNormal"><span lang="EN-US">I wanted to suggest (if not yet done) to another syntax to Java records.</span></p>
<p class="MsoNormal"><span lang="EN-US">I don’t quite understand the idea behind the syntax except that some other programming languages do it similar.</span></p>

<p class="MsoNormal"><span lang="EN-US">A Java class looks like this:</span></p>

<p class="MsoNormal"><span lang="EN-US">public class MyClass</span></p>
<p class="MsoNormal"><span lang="EN-US">{</span></p>
<p class="MsoNormal"><span lang="EN-US">  String s;</span></p>
<p class="MsoNormal"><span lang="EN-US">  void myMethod(String a, int b);</span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>

<p class="MsoNormal"><span lang="EN-US">An interface looks like this:</span></p>

<p class="MsoNormal"><span lang="EN-US">public interface MyInterface</span></p>
<p class="MsoNormal"><span lang="EN-US">{</span></p>
<p class="MsoNormal"><span lang="EN-US">  void myMethod(String c, String d);</span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>

<p class="MsoNormal"><span lang="EN-US">Why all of a sudden is it a good idea to change that syntax to:</span></p>

<p class="MsoNormal"><span lang="EN-US">public record MyRecord(String r, int x)</span></p>
<p class="MsoNormal"><span lang="EN-US">{</span></p>

<p class="MsoNormal"><span lang="EN-US">}</span></p>

<p class="MsoNormal"><span lang="EN-US">instead of the following syntax (which is also possible in C# by the way)</span></p>

<p class="MsoNormal"><span lang="EN-US">public record MyRecord</span></p>
<p class="MsoNormal"><span lang="EN-US">{</span></p>
<p class="MsoNormal"><span lang="EN-US">  String r;</span></p>
<p class="MsoNormal"><span lang="EN-US">  int x;</span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>

<p class="MsoNormal"><span lang="EN-US">I’m teaching Java and I find it strange from a lecturer’s point of view to explain the rationale for introducing the syntax like that. I’d be glad if someone could enlighten me!</span></p></div></blockquote><div><br data-mce-bogus="1"></div><div>Conceptually a record defines components which are more than just fields, a component can not be modified, a component has a public accessor (no encapsulation). </div><div><br data-mce-bogus="1"></div><div>The canonical constructor, equals/hashCode/toString(), the way to reflect on, use annotation or serialize a record are all defined in term of components.</div><div> The order of the components is also important for the serialization and the canonical constructor. The name of the components is important for the canonical constructor.<br></div><div><br data-mce-bogus="1"></div><div>So the syntax reflects the fact that a record is defined by a name and its components.<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>see <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html">https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html</a></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"><span style="color:#1F497D;mso-fareast-language:DE" lang="EN-US">Thanks! Best,</span></p>
<p class="MsoNormal"><span style="color:#1F497D;mso-fareast-language:DE" lang="EN-US">Steffen</span></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>