private int typeDepth(Class<?> match,Class<?> actual){
  if (actual == null) {
    return Integer.MAX_VALUE / 2;
  }
  if (match.equals(Object.class)) {
    return Integer.MAX_VALUE / 4;
  }
  if (match.equals(actual)) {
    return 0;
  }
  int cost=1 + typeDepth(match,actual.getSuperclass());
  for (  Class<?> iface : actual.getInterfaces()) {
    cost=Math.min(cost,1 + typeDepth(match,iface));
  }
  return cost;
}

private int typeDepth ( Class < ? > match , Class < ? > actual ) { if ( actual == null ) { return Integer . MAX_VALUE / 2 ; } if ( match . equals ( Object . class ) ) { return Integer . MAX_VALUE / 4 ; } if ( match . equals ( actual ) ) { return 0 ; } int cost = 1 + typeDepth ( match , actual . getSuperclass ( ) ) ; for ( Class < ? > iface : actual . getInterfaces ( ) ) { cost = Math . min ( cost , 1 + typeDepth ( match , iface ) ) ; } return cost ; }
count of how closely the source matches the target .
