code: @SuppressWarnings("unchecked")
     public static boolean typesMatch(Class<?>[] c1, Class[] c2) {
        if (c1.length != c2.length) {
           return false;
        }
        for (int i = 0; i < c1.length; i++) {
           if (!inSameHierarchy(c1[i], c2[i]) && !isConvertible(c1[i], c2[i])) {
              return false;
           }
        }
        return true;
     }
docs: Determines if the two given arrays of class are compatible with one another.
  
  @param c1 array 1
  @param c2 array 2
  @return True if all classes are the same or those c1 are assignable from c2, otherwise false