private int compareParameterListPreferability_cmpTypeSpecificty(final Class paramType1,final Class paramType2){
  final Class nonPrimParamType1=paramType1.isPrimitive() ? ClassUtil.primitiveClassToBoxingClass(paramType1) : paramType1;
  final Class nonPrimParamType2=paramType2.isPrimitive() ? ClassUtil.primitiveClassToBoxingClass(paramType2) : paramType2;
  if (nonPrimParamType1 == nonPrimParamType2) {
    if (nonPrimParamType1 != paramType1) {
      if (nonPrimParamType2 != paramType2) {
        return 0;
      }
 else {
        return 1;
      }
    }
 else     if (nonPrimParamType2 != paramType2) {
      return -1;
    }
 else {
      return 0;
    }
  }
 else   if (nonPrimParamType2.isAssignableFrom(nonPrimParamType1)) {
    return 2;
  }
 else   if (nonPrimParamType1.isAssignableFrom(nonPrimParamType2)) {
    return -2;
  }
  if (nonPrimParamType1 == Character.class && nonPrimParamType2.isAssignableFrom(String.class)) {
    return 2;
  }
  if (nonPrimParamType2 == Character.class && nonPrimParamType1.isAssignableFrom(String.class)) {
    return -2;
  }
 else {
    return 0;
  }
}

private int compareParameterListPreferability_cmpTypeSpecificty ( final Class paramType1 , final Class paramType2 ) { final Class nonPrimParamType1 = paramType1 . isPrimitive ( ) ? ClassUtil . primitiveClassToBoxingClass ( paramType1 ) : paramType1 ; final Class nonPrimParamType2 = paramType2 . isPrimitive ( ) ? ClassUtil . primitiveClassToBoxingClass ( paramType2 ) : paramType2 ; if ( nonPrimParamType1 == nonPrimParamType2 ) { if ( nonPrimParamType1 != paramType1 ) { if ( nonPrimParamType2 != paramType2 ) { return 0 ; } else { return 1 ; } } else if ( nonPrimParamType2 != paramType2 ) { return - 1 ; } else { return 0 ; } } else if ( nonPrimParamType2 . isAssignableFrom ( nonPrimParamType1 ) ) { return 2 ; } else if ( nonPrimParamType1 . isAssignableFrom ( nonPrimParamType2 ) ) { return - 2 ; } if ( nonPrimParamType1 == Character . class && nonPrimParamType2 . isAssignableFrom ( String . class ) ) { return 2 ; } if ( nonPrimParamType2 == Character . class && nonPrimParamType1 . isAssignableFrom ( String . class ) ) { return - 2 ; } else { return 0 ; } }
trivial comparison of type specificities ; unaware of numerical conversions .
