package com.mozilla.grouperfish.base;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* Can be used as an out-param or optional return value.
* Either use has+get or iterate over the results.
*/
public class Box<T> implements Iterable<T> {
private T value;
public Box<T> put(final T value) {
this.value = value;
return this;
}
public boolean empty() {
return value == null;
}
public T get() {
return value;
}
/** Iterates 0 or 1 times. */
public Iterator<T> iterator() {
return new Iterator<T>() {
private boolean taken = false;
@Override public boolean hasNext() {
return !taken && !empty();
}
@Override public T next() {
if (empty() || taken) throw new NoSuchElementException();
taken = true;
return value;
}
@Override public void remove() {
if (empty() || taken) throw new NoSuchElementException();
taken = true;
value = null;
}
};
}
}