hmm. I guess the fact that you can specify an arbitrary list of terms to Accept makes this a little more complex. So maybe I spoke too soon about enums... But this is still weird and could be improved.

Maybe:

    protected abstract class Action {
        public KList doIt(KList klist);
    }
    protected final class Reject {
        @Override
        public void doIt(KList klist) {
            return null;
        }
    }
    protected final class Original {
        @Override
        public void doIt(KList klist) {
            return klist;
        }
    }
    protected final class Accept {
        List<Term> replacement;
        @Override
        public void doIt(KList klist) {
           //etc
        }
    }