docs: public static int reflectionCompare(
          final Object lhs, 
          final Object rhs, 
          final boolean compareTransients, 
          final Class<?> reflectUpToClass, 
          final String... excludeFields) {
  
          if (lhs == rhs) {
              return 0;
          }
          if (lhs == null || rhs == null) {
              throw new NullPointerException();
          }
          Class<?> lhsClazz = lhs.getClass();
          if (!lhsClazz.isInstance(rhs)) {
              throw new ClassCastException();
          }
          final CompareToBuilder compareToBuilder = new CompareToBuilder();
          reflectionAppend(lhs, rhs, lhsClazz, compareToBuilder, compareTransients, excludeFields);
          while (lhsClazz.getSuperclass() != null && lhsClazz != reflectUpToClass) {
              lhsClazz = lhsClazz.getSuperclass();
              reflectionAppend(lhs, rhs, lhsClazz, compareToBuilder, compareTransients, excludeFields);
          }
          return compareToBuilder.toComparison();
      }