public static Optional<Object[]> coerceParams(Class<?> currentIdxActualParameterType, Class<?> expectedParameterType, Object[] actualParams, int i) {
        Object actualObject = actualParams[i];
        Optional<Object> coercedObject = coerceParam(currentIdxActualParameterType, expectedParameterType,
                                                     actualObject);
        return coercedObject.map(o -> actualCoerceParams(actualParams, o, i));
    }
@Test
    void coerceParamsToDateTimeConverted() {
        Object value = LocalDate.now();
        Object[] actualParams = {value, "NOT_DATE"};
        Optional<Object[]> retrieved = CoerceUtil.coerceParams(LocalDate.class, ZonedDateTime.class, actualParams, 0);
        assertNotNull(retrieved);
        assertTrue(retrieved.isPresent());
        Object[] retrievedObjects = retrieved.get();
        assertTrue(retrievedObjects[0] instanceof ZonedDateTime);
        ZonedDateTime zdtRetrieved = (ZonedDateTime) retrievedObjects[0];
        assertEquals(value, zdtRetrieved.toLocalDate());
        assertEquals(ZoneOffset.UTC, zdtRetrieved.getOffset());
        assertEquals(0, zdtRetrieved.getHour());
        assertEquals(0, zdtRetrieved.getMinute());
        assertEquals(0, zdtRetrieved.getSecond());
        assertEquals(actualParams[1], retrievedObjects[1]);
    }