<div dir="ltr">Currently there are some libs to overcome the limitation like <a href="https://github.com/Randgalt/record-builder">https://github.com/Randgalt/record-builder</a> . However, I still think it looks more like a hack and loses required parameters to be named. It should be part of a language, but there are too many ways to do it and there are some limitations and compromises... which makes it quite difficult to please everyone.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 11 Jan 2024 at 13:54, Roel Meeuws <<a href="mailto:r.j.meeuws@gmail.com">r.j.meeuws@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">Dear all,</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">This is my first message to this list, so I hope I am not proposing something which has already been discussed before. But here goes.</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">In several projects at different companies I have seen the use of big bean classes with lots of data inside and getters, setters, toString, equals, hashcode added. In some projects the boilerplate was mitigated with Lombok, but of course recent JDKs provide the notion of Records.</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">Now records are great data carriers with much less boilerplate, however, there is a particular problem when constructing them for very big sets.</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">Consider a dto representing a line in some EU legal obligation report (of which there are many) that may heve hundreds of fields. When constructing such an object there is no idea of what parameter is being filled in in the code that is constructing the object</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">e.g.</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">record IrritatinglyBigEUReportLine(</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> long processingId;</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> ZonedDateTime reportTime;</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> String firstName;</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> String lastName;</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> String leiCode;<br> String legalReportingId;</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> BigDecimal riskAmount;<br> BigDecimal mifidRiskAmount;<br> BigDecimal mifid2FinancialRiskAmount;<br> BigDecimal mifid2SomeOtherAmount;<br> ......</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">) {}</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">now let's construct this:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">var line = new IrritatinglyBigEUReportLine(</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> 12345,</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> ZonedDateTime.now(),</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> "John",</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> "Doe",</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> "529900T8BM49AURSDO55",</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> BigDecimal.valueOf("100.0"),</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> BigDecimal.valueOf("100.0"),<br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> BigDecimal.valueOf("100.0"),<br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> BigDecimal.valueOf("100.0"), // anyone knows what this value is here?<br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"> ...</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">);</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">// also this will give a compile error in my IDE, which parameter is missing now?</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">Could we introduce a better way of initialization like the following, which is like the `with`-er syntax, I have read Brian Goetz writing about.</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">var line = new IrritatingLuBigEUReportLine with {</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><div class="gmail_default"> processingId =12345;</div><div class="gmail_default"> reportTime = ZonedDateTime.now();</div><div class="gmail_default"> firstName = "John";</div><div class="gmail_default"> lastName = "Doe";</div><div class="gmail_default"> leiCode = "529900T8BM49AURSDO55";</div><div class="gmail_default"> legalReportingId = "ERE43434452ERERTTT";</div><div class="gmail_default"> riskAmount = BigDecimal.valueOf("100.0");</div><div class="gmail_default"> mifidRiskAmount = BigDecimal.valueOf("100.0");</div><div class="gmail_default"> mifid2FinancialRiskAmount = BigDecimal.valueOf("100.0");</div><div class="gmail_default"> mifid2SomeOtherAmount = BigDecimal.valueOf("100.0");</div><div class="gmail_default"> ...</div></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">};</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div><div dir="ltr" class="gmail_signature"><div>Roel</div><div><br></div><div>--------------------------------------------<br>Roel Meeuws<br>Email: <a href="mailto:r.j.meeuws@gmail.com" target="_blank">r.j.meeuws@gmail.com</a><br>Mob. phone: +31 (0)6 10 82 44 01<br>--------------------------------------------</div></div></div></div><div id="m_7710971634432452811DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br><table style="border-top:1px solid rgb(211,212,222)"><tbody><tr><td style="width:55px;padding-top:13px"><a href="http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail" target="_blank"><img src="https://s-install.avcdn.net/ipm/preview/icons/icon-envelope-tick-green-avg-v1.png" alt="" width="46" height="29" style="width: 46px; height: 29px;"></a></td><td style="width:470px;padding-top:12px;color:rgb(65,66,78);font-size:13px;font-family:Arial,Helvetica,sans-serif;line-height:18px">Virus-free.<a href="http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail" style="color:rgb(68,83,234)" target="_blank">www.avg.com</a></td></tr></tbody></table><a href="#m_7710971634432452811_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"></a></div>
</blockquote></div><br clear="all"><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature">WBR, Anatoly.</div>