Я пытаюсь написать API для интерпретатора для языка моего собственного создания, и у меня пока есть три класса:
Вот фрагмент из класса CandleInterpreter (основной класс 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 = "";
}
этот класс содержит этот метод:
public void output(String message) {
try {
outputClass.getConstructor(String.class).newInstance(message);
} catch (Exception exception) {
output("Output class is invalid.");
System.exit(0);
}
}
Вот фрагмент из класса «Вывод»:
public class Output {
public Output(String message) {
System.out.println(message);
}
}
А вот фрагмент из class 'Main':
public static void main(String args[]) {
CandleInterpreter interpreter = new CandleInterpreter(Input.class, Output.class);
interpreter.output("Hello World!");
}
Этот код работает нормально, но в основном классе, когда я передаю другой класс в объект CandleInterpreter вместо класса Output.class, a StackOverflowError 'брошено:
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)
...
Я запутался, почему эта ошибка генерируется, так как у меня есть строка кода' outputClass.getConstructor (String.class) .newInstance (message); ' в попытке поймать заявление. Кто-нибудь может объяснить? Спасибо.
-PrimeCubed