¿Por qué se está lanzando un StackOverflowError, cuando el código se encuentra en una sentencia try y la captura?

PrimeCubed:

Estoy intentando escribir una API para un intérprete para un lenguaje de mi propia creación, y tengo tres clases hasta el momento:

Aquí hay un fragmento de la clase 'CandleInterpreter' (La clase principal API):

protected Class<?> inputClass;
protected Class<?> outputClass;
public String input;
protected String currentFile;

public CandleInterpreter(Class<?> inputClass, Class<?> outputClass) {
    this.inputClass = inputClass;
    this.outputClass = outputClass;
    this.input = "";
    this.currentFile = "";
}

Esta clase contiene este método:

public void output(String message) {
    try {
        outputClass.getConstructor(String.class).newInstance(message);
    } catch (Exception exception) {
        output("Output class is invalid.");
        System.exit(0);
    }
}

Aquí hay un fragmento de la clase 'Salida':

public class Output {
    public Output(String message) {
        System.out.println(message);
    }
}

Y aquí es un fragmento de la clase 'principal':

public static void main(String args[]) {
    CandleInterpreter interpreter = new CandleInterpreter(Input.class, Output.class);
    interpreter.output("Hello World!");
}

Este código funciona bien, pero en la clase principal, cuando pase una clase diferente en el objeto 'CandleInterpreter', en lugar de la clase 'Output.class', un 'StackOverflowError' es lanzada:

Exception in thread "main" java.lang.StackOverflowError
at java.base/java.lang.StringUTF16.compress(StringUTF16.java:158)
at java.base/java.lang.String.<init>(String.java:3002)
at java.base/java.lang.String.<init>(String.java:250)
at java.base/java.util.StringJoiner.toString(StringJoiner.java:187)
at java.base/java.lang.Class.methodToString(Class.java:3374)
at java.base/java.lang.Class.getConstructor0(Class.java:3302)
at java.base/java.lang.Class.getConstructor(Class.java:2110)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:107)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
at CandleAPI.CandleInterpreter.output(CandleInterpreter.java:109)
...

Estoy confundido por qué se está lanzando este error, ya que tengo la línea de código 'outputClass.getConstructor (String.class) .newInstance (mensaje);' en una sentencia try y catch. ¿Puede alguien explicar? Gracias.

-PrimeCubed

akshaya Pandey:

La siguiente línea es tirar la excepción:

     output("Output class is invalid.");

Por lo tanto va el código en el bloque de captura y trata de ejecutar:

       output("Output class is invalid.");

En cambio si se reemplaza el código en bloque catch a continuación, no va a entrar en un bucle infinito:

        System.out.println("Output class is invalid.);

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=404013&siteId=1
Recomendado
Clasificación