# JAVA basic iterator implementation
[hear] (class COS_JListIterator (ref)
              (field pipe (cell new (ref contents get)))
              (method <init>-V (self))
              (method <init> (self <init>-V))
              (method hasNext-Z (> (list-length / pipe get) 0))
              (method hasNext (self hasNext-Z))
              (method next (self next-Object))
              (method next-Object
                  (let ((result (head / pipe get)))
                (begin
                  (pipe set / tail / pipe get)
                  (result)))));

[hear] (define test1 (COS_JList new));

[hear] (begin
         (test1 add 15)
         (test1 add 72)
         (test1 add 99)
         (true));

[hear] (define iter1 (test1 iterator));

[hear] (iter1 hasNext);

[hear] (demo / iter1 next);
   evaluates to: 99

[hear] (iter1 hasNext);

[hear] (demo / iter1 next);
   evaluates to: 72

[hear] (iter1 hasNext);

[hear] (demo / iter1 next);
   evaluates to: 15

[hear] (not / iter1 hasNext);

       # There is Java code for COS_JListIterator available