<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<font size="4" face="monospace">It depends on a lot of things. (If
all arguments have defaults, then your initial value can even be a
static constant.) But the fact that your first reaction is "but
won't that be slow" is one that you should work hard to suppress;
for the vast majority of developers, our initial assumptions about
the impact of micro performance issues on macro performance are
usually dead wrong. Sometimes they merely cause us to waste a lot
of time; sometimes the consequences are much worse. <br>
<br>
This is especially true in the domain you're asking about (big
enterprise applications); your example was from a report, and the
likelihood that the performance bottleneck in an enterprise
reporting application is that each object was allocated twice is
probably similar to the likelihood of the programmer growing an
extra head. Just write clear, maintainable code. <br>
<br>
<br>
<br>
<br>
</font><br>
<div class="moz-cite-prefix">On 1/11/2024 8:56 AM, Roel Meeuws
wrote:<br>
</div>
<blockquote type="cite" cite="mid:CAK-vHezHr1As2s7_WxMUWzpJTqdH_EFfT7p2_dgRHNcLpgvrzA@mail.gmail.com">
<div dir="ltr">
<div class="gmail_default" style="font-family:monospace,monospace;font-size:small">Thanks
Brian,</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">Using
a reconstruction to do the trick will be much more readable
that what we have now, but what will the jvm actually do? Will
it instantiate the record twice? will all defaults (maybe
expensive?) be generated or optimized away?</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 the
end large beans are a pain, records seem to be a better fit,
but construction does not "feel" right. At least with withers
it will improve.</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">thanks again</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" moz-do-not-send="true" class="moz-txt-link-freetext">r.j.meeuws@gmail.com</a><br>
Mob. phone: +31 (0)6 10 82 44 01<br>
--------------------------------------------</div>
</div>
</div>
<br>
</div>
<div id="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br>
<table style="border-top:1px solid #d3d4de">
<tbody>
<tr>
<td style="width:55px;padding-top:13px"><a href="https://urldefense.com/v3/__http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail__;!!ACWV5N9M2RV99hQ!Ig_SF2x7ANWNTTioGRcRkqogDX3EusEU2Q819kknrYIKOc6WF9xMfWf2vLWmc_uoLAKYRHD15g0wbCmzIBEN$" target="_blank" moz-do-not-send="true"><img src="https://s-install.avcdn.net/ipm/preview/icons/icon-envelope-tick-green-avg-v1.png" alt="" style="width: 46px; height: 29px;" moz-do-not-send="true" width="46" height="29"></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="https://urldefense.com/v3/__http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail__;!!ACWV5N9M2RV99hQ!Ig_SF2x7ANWNTTioGRcRkqogDX3EusEU2Q819kknrYIKOc6WF9xMfWf2vLWmc_uoLAKYRHD15g0wbCmzIBEN$" target="_blank" style="color:#4453ea" moz-do-not-send="true">www.avg.com</a></td>
</tr>
</tbody>
</table>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Op do 11 jan 2024 om 14:37
schreef Brian Goetz <<a href="mailto:brian.goetz@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">brian.goetz@oracle.com</a>>:<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> <font size="4" face="monospace">"Can I specify
parameters by name instead of position" is a frequent
request. Unfortunately there's a lot more complexity
under the waterline here than anyone wants to talk about.<br>
<br>
The short answer to the localized question ("could we
support by-name invocation of the canonical record
constructor") is "yes"; since the component names are
committed as part of the classes interface, it is
relatively simple matter to support this for the canonical
constructor of records. But that begs the question: would
this be a good idea (let alone "would this actually make
people happy.") Let's talk about how this glass will seem
X% empty.<br>
<br>
First, because this is specific to records (and to a
specific constructor for records), this creates a seam
between how you can interact with records and with other
classes. That means that users have to keep a "mental
dictionary" of which classes are records and which are
not. Second, because the use site is likely to be in a
separate compilation unit, you've now created an
impediment to migrating between records and their
equivalent classes, because such a migration would no
longer be source compatible (clients would fail to
recompile). Third, people will surely find this boundary
to be irregular; "why can I do it with this class and not
that" or "with this constructor and not that" or "with
constructors but not with static factories" will be
frequent questions; even if these questions have good
answers, it means that we've increased the set of fiddly
rules that all developers have to internalize. And
developers are rarely made happy by "OK, you can do that
on tuesday mornings only" solutions; if anything, it
creates more unhappiness that they can't do it all week
long.<br>
<br>
And that doesn't mention the elephant in the room: default
values. Most of the time, when people ask about by-name
invocation, the question of defaults for parameters they
do not name isn't far behind. And this is where it really
gets messy, because this injects new complexity into an
already-complex area of the language (overload selection),
and some painful questions about binary compatibility
("surely I can add another parameter with a default?")<br>
<br>
However, if your record really does have reasonable
defaults for some fields (such as empty lists, not just
null), the proposed `with` mechanism would let you do what
you want without a new feature: define a "minimal
constructor" with the required fields (which fills in
defaults for the others), and then combine that with a
reconstruction expression:<br>
<br>
new Foo(reqA, reqB, reqC) <br>
with { optD = 3, optQ = "Hi Bob" }<br>
<br>
and you're good. <br>
<br>
<br>
</font><br>
<div>On 1/11/2024 7:48 AM, Roel Meeuws wrote:<br>
</div>
<blockquote type="cite">
<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" moz-do-not-send="true" class="moz-txt-link-freetext">r.j.meeuws@gmail.com</a><br>
Mob. phone: +31 (0)6 10 82 44 01<br>
--------------------------------------------</div>
</div>
</div>
</div>
<div id="m_-6520745720552268387DAB4FAD8-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="https://urldefense.com/v3/__http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail__;!!ACWV5N9M2RV99hQ!Ig_SF2x7ANWNTTioGRcRkqogDX3EusEU2Q819kknrYIKOc6WF9xMfWf2vLWmc_uoLAKYRHD15g0wbCmzIBEN$" target="_blank" moz-do-not-send="true"><img src="https://s-install.avcdn.net/ipm/preview/icons/icon-envelope-tick-green-avg-v1.png" alt="" style="width: 46px; height: 29px;" moz-do-not-send="true" width="46" height="29"></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="https://urldefense.com/v3/__http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail__;!!ACWV5N9M2RV99hQ!Ig_SF2x7ANWNTTioGRcRkqogDX3EusEU2Q819kknrYIKOc6WF9xMfWf2vLWmc_uoLAKYRHD15g0wbCmzIBEN$" style="color:rgb(68,83,234)" target="_blank" moz-do-not-send="true">www.avg.com</a></td>
</tr>
</tbody>
</table>
</div>
</blockquote>
<br>
</div>
</blockquote>
</div>
</blockquote>
<br>
</body>
</html>