¥abstract class List
{
¥ abstract Object getFirst();
¥ abstract List getRest();
¥ abstract List insert(Object e);
¥ abstract List sort();
¥ abstract String toStringHelp();
¥ abstract List sort();
¥}
¥
¥class Empty extends
List {
¥ static Empty ONLY = new Empty(); //
singleton pattern
¥ private Empty() {}
¥ Object getFirst() { throw new
IllegalArgumentException(
¥ "first requires a non Empty
List");
¥ }
¥ List getRest() { throw new
IllegalArgumentException(
¥ "rest requires a non Empty
List");
¥ }
¥ List sort() { return Empty.ONLY; }
¥ List insert(Object e) { return new
Cons(e,Empty.ONLY); }
¥ public String toString() { return
"()"; }
¥ String toStringHelp() { return
""; }
¥}