<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" data-smartmail="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="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br><table style="border-top:1px solid #d3d4de"><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:#41424e;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" target="_blank" style="color:#4453ea">www.avg.com</a></td></tr></table><a href="#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"></a></div>