package recursion; public class TailCalls { public static TailCall tailCall(TailCall nextCall) { return nextCall; } public static TailCall done(T value) { return new TailCall() { @Override public boolean isComplete() { return true; } @Override public T result() { return value; } @Override public TailCall apply() { throw new UnsupportedOperationException(); } }; } }