<div dir="ltr"><div class="gmail_default" style="font-family:monospace">Hello REDIODev,</div><div class="gmail_default" style="font-family:monospace"><br></div><div class="gmail_default" style="font-family:monospace">Thank you for your response!</div><div class="gmail_default" style="font-family:monospace"><br></div><div class="gmail_default" style="font-family:monospace">So, your solution definitely works, but this falls under the indirection I was talking about in my original post. You can go back to the June archives to see what I mean.</div><div class="gmail_default" style="font-family:monospace"><br></div><div class="gmail_default" style="font-family:monospace">Indirection itself isn't bad, but it adds overhead in ways that wouldn't need to be there if it was direct references to records like we have for tree examples.</div><div class="gmail_default" style="font-family:monospace"><br></div><div class="gmail_default" style="font-family:monospace">Thank you for your input!</div><div class="gmail_default" style="font-family:monospace">David Alayachew<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jul 4, 2023 at 3:39 AM <<a href="mailto:redio.development@gmail.com">redio.development@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 class="msg-3024134524031898421"><div style="overflow-wrap: break-word;" lang="DE"><div class="m_-3024134524031898421WordSection1"><p class="MsoNormal"><span lang="EN-US">I think the main problem as I understand it is, that you cannot forward declare the identity of an object. So it’s technically not a record problem but a class problem.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">If you could forward declare an uninitialized Object reference like this pseudo code does:<u></u><u></u></span></p><p class="MsoNormal">EndNode e = new EndNode();<u></u><u></u></p><p class="MsoNormal">BranchNode v = uninit;<u></u><u></u></p><p class="MsoNormal">BranchNode u = new BranchNode(v, e, e);<u></u><u></u></p><p class="MsoNormal">BranchNode t = new BranchNode(u, v, e);<u></u><u></u></p><p class="MsoNormal">v = new BranchNode(t, e, e);<u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">StartNode s = new StartNode(t, u, v);<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">You wouldn’t have that problem. The problem here is that you would need the notion of references that are neither null nor an object but in some sort of null with identity that is later initialized.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">An easy solution would be to go for an ID instead of java references. IDs have the benefit that you can forward declare them:<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">public</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">class</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">Test</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">public</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">static</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">void</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">main</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">String</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">[] </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">args</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">) {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">        </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">EndNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">e</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> = </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(197,134,192)" lang="EN-US">new</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">EndNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">randomUUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">());<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">        </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">vUUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> = </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">randomUUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">();<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">        </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">BranchNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">u</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> = </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(197,134,192)" lang="EN-US">new</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">BranchNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">randomUUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(), </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">vUUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">e</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(), </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">e</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">());<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">        </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">BranchNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">t</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> = </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(197,134,192)" lang="EN-US">new</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">BranchNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">randomUUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(), </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">u</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(), </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">vUUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">e</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">());<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">        </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">BranchNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">v</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> = </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(197,134,192)" lang="EN-US">new</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">BranchNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">vUUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">t</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(), </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">e</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(), </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">e</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">());<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">        </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">StartNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">s</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> = </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(197,134,192)" lang="EN-US">new</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">StartNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">randomUUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(), </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">t</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(), </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">u</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(), </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">v</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">());<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    }<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">}<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">class</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">NodeStore</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">public</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">static</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">final</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">Map</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"><</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">Node</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(79,193,255)" lang="EN-US">map</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> = </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(197,134,192)" lang="EN-US">new</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">HashMap</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"><>();<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">}<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">sealed</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">interface</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">Node</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">();<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">}<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">record</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">StartNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">a</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">b</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">c</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">) </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">implements</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">Node</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">public</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">StartNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">        </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">NodeStore</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(79,193,255)" lang="EN-US">map</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">put</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">this</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">);<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    }<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">}<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">record</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">BranchNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">a</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">b</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">c</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">) </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">implements</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">Node</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">public</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">BranchNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">        </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">NodeStore</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(79,193,255)" lang="EN-US">map</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">put</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">this</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">);<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    }<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">}<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">record</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">EndNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">UUID</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">) </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">implements</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">Node</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">public</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">EndNode</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US"> {<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">        </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(78,201,176)" lang="EN-US">NodeStore</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(79,193,255)" lang="EN-US">map</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">.</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(220,220,170)" lang="EN-US">put</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">(</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(156,220,254)" lang="EN-US">self</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">, </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(86,156,214)" lang="EN-US">this</span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">);<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)" lang="EN-US">    </span><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)">}<u></u><u></u></span></p><p class="MsoNormal" style="line-height:14.25pt;background:rgb(30,30,30)"><span style="font-size:10.5pt;font-family:"Fira Code Medium";color:rgb(212,212,212)">}<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">The downside is that you are responsible to manage the IDs instead of the runtime.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Hope that helps<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Great Regards<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">RedIODev<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><div style="border-color:rgb(225,225,225) currentcolor currentcolor;border-style:solid none none;border-width:1pt medium medium;padding:3pt 0cm 0cm"><p class="MsoNormal"><b>Von:</b> amber-dev <<a href="mailto:amber-dev-retn@openjdk.org" target="_blank">amber-dev-retn@openjdk.org</a>> <b>Im Auftrag von </b>David Alayachew<br><b>Gesendet:</b> Dienstag, 4. Juli 2023 03:43<br><b>An:</b> Ron Pressler <<a href="mailto:ron.pressler@oracle.com" target="_blank">ron.pressler@oracle.com</a>><br><b>Cc:</b> amber-dev <<a href="mailto:amber-dev@openjdk.org" target="_blank">amber-dev@openjdk.org</a>><br><b>Betreff:</b> Re: [External] : Re: Question about circular references<u></u><u></u></p></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:"Courier New"">Hello Ron,<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:"Courier New"">Thank you for your response!<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:"Courier New""><br>> I don’t see a lack of representability. Java’s records<br>> can represent tuples — the thing they are meant to<br>> represent.<br><br>Apologies, I was not clear here. My question to you is actually, do you see a problem with the fact that records cannot represent a circular reference to themselves?<br><br>According to the definitions I cited earlier, tuples/product types have circular references in their domain of possible values, and therefore, we do have a lack of representability if I model my data as nodes, and not edges. The fact that you can sidestep that by modelling it as edges does not change the fact that you do indeed have a gap of representability.<br><br>And to be clear, this question rises above State Transition Diagrams and just talks about circular references alone.<br><br>> and if you want to represent a graph in a more<br>> OOPy/pointery way, i.e. not with tuples, use classes that<br>> aren’t tuples, which are also representable in Java (and<br>> you can also make them immutable if you like).<br><br>Are you saying you can accomplish this without indirection, as in without a Map lookup or something equivalent? If so, please demonstrate.<br><br>> To represent a potentially cyclic graph with tuples you<br>> can use the ordinary representation of edges<br><br>I understand your point, but this requires me to apply an ill fitting model because the language is unable to map the one I actually need.<br><br>I am modeling control flow. The question that I am constantly asking is "What are my next possible steps from this current node?" Rather than having the node store that information directly, you are telling me to create a set of edges and simply perform a lookup on this set, filtering down to the ones that start/end (assuming bidirectional) with my current node so that I can figure out what my next option is. Do you see what I mean when I say that this ia a bad fit?<br><br>Yes, technically, that works, but this is even worse in the department of indirection. I didn't want to avoid indirection because indirection is in and of itself bad. I wanted to avoid indirection so that my model would have as little intellectual and data overhead as possible. I wanted to be able to answer my question as directly as possible so that I can reason about my problem as easily as possible. Your solution goes completely in the opposite direction of that and adds so much overhead that I would sooner choose the workarounds I mentioned originally.<br><br>And I'm sure that your strategy would be more useful in a weighted graph or something, but hopefully you see where I am coming from here?<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:"Courier New"">Thank you for your time and insight!<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:"Courier New"">David Alayachew<u></u><u></u></span></p></div></div></div></div></div></blockquote></div>