public <TArg extends Arg> TArg extract(TArg arg) throws MissingArgumentError { Field[] fields = getFields(arg); int count = extract(arg, fields); if( arg instanceof Req && count != fields.length ) throw new MissingArgumentError(arg.usage()); return arg; }