¿Cómo resolver java.lang.NoSuchMethodError en Java?

Un java.lang.NoSuchMethodError , como sugiere el nombre, es un error de tiempo de ejecución en Java que ocurre cuando se llama a un método que existe en tiempo de compilación, pero no existe en tiempo de ejecución. El java.lang.NoSuchMethodError puede ocurrir en caso de que el código de la aplicación esté parcialmente compilado, o en caso de que una dependencia externa en un proyecto cambie el código de manera incompatible (por ejemplo, eliminó el método de llamada) de una versión a otra. Es como se muestra en la siguiente ilustración de la siguiente manera:

Ilustración:

java.lang
Class NoSuchMethodError
    java.lang.Object
        java.lang.Throwable
            java.lang.Error
                java.lang.LinkageError
                    java.lang.IncompatibleClassChangeError
                        java.lang.NoSuchMethodError

Nota: Todas las interfaces implementadas son interfaces serializables en Java .

Ahora analicemos las causas detrás de esta excepción para descubrir cómo resolver el mismo problema. java.lang. Ocurre cuando no se encuentra un método en particular. Este método puede ser un método de instancia o un método estático. El java.lang.NoSuchMethodError ocurre cuando una aplicación no encuentra un método en tiempo de ejecución. En la mayoría de los casos, podemos detectar este error en tiempo de compilación. Por lo tanto, no es un gran problema. Sin embargo, a veces se puede lanzar en tiempo de ejecución, y luego encontrarlo se vuelve un poco difícil. De acuerdo con la documentación de Oracle, este error puede ocurrir en tiempo de ejecución si una clase ha cambiado de manera incomparable. Por lo tanto, podemos encontrarnos con este error en los siguientes casos. En primer lugar, si hacemos solo una recopilación parcial de nuestro código. En segundo lugar, si hay incompatibilidad de versiones con las dependencias de nuestra aplicación, como los jars externos.

Nota: el árbol de herencia NoSuchMethodError incluye IncompatibleClassChangeError y LinkageError. Estos errores están asociados con un cambio de clase incompatible después de la compilación.

Implementación:

Ahora propondremos dos ejemplos en los que primero ilustraremos la excepción lanzada y, en un ejemplo posterior, resolveremos la misma a través de problemas limpios de Java.

Ejemplo 1

Java

// Java Program to Demonstrate NoSuchMethodError by 
// throwing it due to a breaking change 
// introduced within an application
  
// Importingn I/O classes
import java.io.*;
  
// Class 1
// Helper class
class NoSuchMethodError {
  
    // Method 1
    // Void demo method created to be called
    // in another class containing main() method
    public void printer(String myString)
    {
  
        // Print statement
        System.out.println(myString);
    }
}
  
// Class 2
// Main class
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Creating object of class 1
        NoSuchMethodError obj = new NoSuchMethodError();
  
        // Now calling print() method which is not present
        // in NoSuchMethodErrorExample class, hence throwing
        // exception
        obj.print("Hello World");
    }
}

Producción:

Ahora si tratamos de sacar conclusiones sobre la posible solución para solucionar el error anterior. Para eso, debemos cuidar dos parámetros como se enumeran: 

  • Llame al método correcto que está presente en la clase.
  • Verifique el nombre del método y su firma que está tratando de llamar.

Ejemplo 2

Java

// Java Program to Resolve NoSuchMethodError
  
// Importing input output classes
import java.io.*;
  
// Class 1
// Helper class
class NoSuchMethodError {
    // Defined printer method
    public void printer(String myString)
    {
        // Print the string which will be passed
        // in the main() method
        System.out.println(myString);
    }
}
  
// Class 2
// Main Class
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
        // Creating object of above class in
        // main() method of this class
        NoSuchMethodError obj
            = new NoSuchMethodError();
  
        // Calling printer() method which is  present in
        // NoSuchMethodErrorExample class
        obj.printer("Hello World");
    }
}
Producción

Hello World

Publicación traducida automáticamente

Artículo escrito por praveen13kulkarni y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *