code: public static int reflectionCompare(final Object lhs, final Object rhs, final boolean compareTransients) {
          return reflectionCompare(lhs, rhs, compareTransients, null);
      }
docs: <p>Compares two <code>Object</code>s via reflection.</p>
  
  <p>Fields can be private, thus <code>AccessibleObject.setAccessible</code>
  is used to bypass normal access control checks. This will fail under a
  security manager unless the appropriate permissions are set.</p>
  
  <ul>
  <li>Static fields will not be compared</li>
  <li>If <code>compareTransients</code> is <code>true</code>,
  compares transient members.  Otherwise ignores them, as they
  are likely derived fields.</li>
  <li>Superclass fields will be compared</li>
  </ul>
  
  <p>If both <code>lhs</code> and <code>rhs</code> are <code>null</code>,
  they are considered equal.</p>
  
  @param lhs  left-hand object
  @param rhs  right-hand object
  @param compareTransients  whether to compare transient fields
  @return a negative integer, zero, or a positive integer as <code>lhs</code>
  is less than, equal to, or greater than <code>rhs</code>
  @throws NullPointerException  if either <code>lhs</code> or <code>rhs</code>
  (but not both) is <code>null</code>
  @throws ClassCastException  if <code>rhs</code> is not assignment-compatible
  with <code>lhs</code>