El último argumento variable no es opcional cuando se llama al método usando la reflexión

Estoy tratando de invocar un método usando reflexión

Method mi = TestInterface.class.getMethod("TestMethod", java.lang.String.class,java.lang.String.class,java.lang.String.class,java.lang.Object[].class);

Este método tiene 3 argumentos de cadena obligatorios, el último argumento, que es el argumento variable, es opcional.

Sin embargo, cuando invoco este método como a continuación.

mi.invoke(new TestImplementation(), new Object[]{"arg1", "arg2","arg3"});

entonces me da un error java.lang.IllegalArgumentException: wrong number of arguments

pero el último argumento debería ser opcional ¿verdad? ¿o esto no funciona en caso de invocar métodos usando la reflexión?

Código:

public interface TestInterface {
    public void TestMethod(String str, String str1, String str2, Object... objects);
} 

public class TestImplementation implements TestInterface {
    public void TestMethod(String str1, String str2, String str3, Object... objects) {
        // ....
    }
}

public static void main(String[] args) throws Exception { 
    // works perfectly
    TestInterface obj = new TestImplementation();
    obj.TestMethod("str", "str1", "str2");
    // doesn't work
    Method mi = TestInterface.class.getMethod("TestMethod", java.lang.String.class, java.lang.String.class,
            java.lang.String.class);
    mi.invoke(new TestImplementation(), new Object[] { "arg1", "arg2", "arg3" });
}

Gracias por adelantado

Respuesta 1

Tengo dicho elemento <xsd: element name = "Car" type = "carType" /> <xsd: complexType name = "carType"> <xsd: complexContent> <xsd: extension base = "basicType"> & ...

Me gustaría aclarar qué versión de Java puedo usar libremente con GeoServer. Porque desde el año pasado, Java pagó de cierta manera: https: //www.snowsoftware.com/int/blog/2019/03/07/can-java -...

Hay una cadena como: Consulta de cadena = "param1, param2, param3 {npam1, npam2, npam3 {nipam1, nipam2}}"; Esta cadena debe procesarse en el formato: {param1: param1, param2: param2, ...

Tengo dos contenedores docker que estoy construyendo usando docker-compose. Uno de los cuales inicializa los ibm mqs y otro es el que expone los puntos finales de descanso (usando el proyecto SpringBoot) para enviar mensajes a ...