boolean useTransients) {
boolean useTransients, String[] excludeFields) {
    private static void reflectionAppend(        Object lhs,        Object rhs,        Class clazz,        EqualsBuilder builder,        boolean useTransients) {        Field[] fields = clazz.getDeclaredFields();        AccessibleObject.setAccessible(fields, true);        for (int i = 0; i < fields.length && builder.isEquals; i++) {            Field f = fields[i];            if ((f.getName().indexOf('$') == -1)                && (useTransients || !Modifier.isTransient(f.getModifiers()))                && (!Modifier.isStatic(f.getModifiers()))) {                try {                    builder.append(f.get(lhs), f.get(rhs));                } catch (IllegalAccessException e) {                    //this can't happen. Would get a Security exception instead                    //throw a runtime exception in case the impossible happens.                    throw new InternalError("Unexpected IllegalAccessException");                }            }        }    }