code: private static int distance(final Class<?>[] classArray, final Class<?>[] toClassArray) {
          int answer = 0;
  
          if (!ClassUtils.isAssignable(classArray, toClassArray, true)) {
              return -1;
          }
          for (int offset = 0; offset < classArray.length; offset++) {
              // Note InheritanceUtils.distance() uses different scoring system.
              if (classArray[offset].equals(toClassArray[offset])) {
                  continue;
              } else if (ClassUtils.isAssignable(classArray[offset], toClassArray[offset], true)
                      && !ClassUtils.isAssignable(classArray[offset], toClassArray[offset], false)) {
                  answer++;
              } else {
                  answer = answer + 2;
              }
          }
  
          return answer;
      }
docs: <p>Returns the aggregate number of inheritance hops between assignable argument class types.  Returns -1
  if the arguments aren't assignable.  Fills a specific purpose for getMatchingMethod and is not generalized.</p>
  @param classArray
  @param toClassArray
  @return the aggregate number of inheritance hops between assignable argument class types.