<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang="NL-BE" link="blue" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-GB">Hello all<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">I was recently thinking about cases where the new "value classes"/"primitive classes" (or whatever they'll be called) can be used. One of the common places where I learned C# devs use their structs, back when I used to
code in C#, is in iterators. However, this is not a case we can mirror in Java, as our version of these "structs" are immutable. However there are variants that could still allow these, and I was wondering whether any thought has been given to those (or other
variants) yet, and/or whether they are deemed not useful.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">One such variation:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">```java<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">class ArrayList<T> implements Iterable2<T> {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> @Override<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> public Iterator2<T> iterator2() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> return new ArrayListCursor<>(this, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> value record ArrayListCursor<T>(ArrayList<T> list, int index) implements Iterator2<T> {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> @Override<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> public boolean hasNext() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> return index < list.size();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> @Override <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> public Tupple2<T, Iterator2<T>> moveNext() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> if (!this.hasNext()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> throw new NoSuchElementException();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> return new Tupple2(list.get(index), new ArrayListCursor<>(list, index + 1));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> // or<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> @Override<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> public T next() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> if (!this.hasNext()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> throw new NoSuchElementException();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> return list.get(index);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> @Override <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> Iterator2<T> moveNext() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> if (!this.hasNext()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> throw new NoSuchElementException();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> return new ArrayListCursor<>(list, index + 1);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">```<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">Greetings<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">Robbe Pincket<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
</div>
</body>
</html>