this.value = value;
return hasNext;
if (hasNext) { hasNext = false; return value; } else { throw new IllegalStateException(); }
throw new UnsupportedOperationException();