static ItIt itIt(ItIt it) { if (it == null) ret emptyItIt(); ret it; } static ItIt itIt(Iterator it) { if (it == null) ret emptyItIt(); if (it cast ItIt) ret it; ret new IterableIterator { public bool hasNext() { ret it.hasNext(); } public A next() { ret it.next(); } }; } static ItIt itIt(Iterable l) { if (l == null) ret emptyItIt(); if (l cast ItIt) ret l; Iterator it = l.iterator(); if (it cast ItIt) ret it; ret new IterableIterator { public bool hasNext() { ret it.hasNext(); } public A next() { ret it.next(); } }; }