Java getMethod con parámetro de subclase

Estoy escribiendo una biblioteca que usa la reflexión para encontrar y llamar métodos de forma dinámica. Dado solo un objeto, un nombre de método y una lista de parámetros, debo llamar al método dado como si la llamada al método estuviera explícitamente escrita en el código.

He estado usando el siguiente enfoque, que funciona en la mayoría de los casos:

static void callMethod(Object receiver, String methodName, Object[] params) {
    Class<?>[] paramTypes = new Class<?>[params.length];
    for (int i = 0; i < param.length; i++) {
        paramTypes[i] = params[i].getClass();
    }
    receiver.getClass().getMethod(methodName, paramTypes).invoke(receiver, params);
}

Sin embargo, cuando uno de los parámetros es unsubclase de uno de los tipos admitidos para el método, la API de reflexión lanza unNoSuchMethodException. Por ejemplo, si la clase del receptor tienetestMethod(Foo) definido, lo siguiente falla:

receiver.getClass().getMethod("testMethod", FooSubclass.class).invoke(receiver, new FooSubclass());

a pesar de que esto funciona:

receiver.testMethod(new FooSubclass());

¿Cómo resuelvo esto? Si la llamada al método está codificada de forma rígida, no hay problema: el compilador simplemente usa el algoritmo de sobrecarga para elegir el mejor método aplicable. Sin embargo, no funciona con la reflexión, que es lo que necesito.

¡Gracias por adelantado!

Respuestas a la pregunta(2)

Su respuesta a la pregunta