Ich erhalte eine java.lang.StackOverflowError
beim Versuch, eine Methode innerhalb einer anderen Klasse aufzurufen.Java - StackOverflowError - Zugriff auf HashMaps
Ich denke, das Problem liegt daran, dass jede Klasse in sich instanziiert wird, aber ich bin nicht sicher, warum es diesen Fehler verursacht oder wie es zu beheben.
Methodenaufruf von Main():
nexaConnect.returnAllChronologicalByRoom("bathroomSensorMappings");
Logic():
public class Logic {
private SensorMaps mapAccess = new SensorMaps();
void returnAllChronologicalByRoom(String room) {
System.out.print(mapAccess.returnMap(room).get(0));
}
}
SensorMaps:
public class SensorMaps {
private Logic sensorConnect = new Logic();
HashMap<Integer, String> returnMap(String mapChoice) {
return MapRegistry.find(mapChoice);
}
}
Es gibt eine dritte MapRegistry Klasse, aber ich glaube nicht, Dies verursacht Probleme, aber ich werde es für die Vollständigkeit hinzufügen:
MapRegistry:
class MapRegistry {
static Map<String,HashMap<Integer,String>> allMaps = new HashMap<>();
static void register(String name, HashMap<Integer,String> myMap) {
allMaps.put(name, myMap);
}
static HashMap<Integer,String> find(String name) {
return allMaps.get(name);
}
}
Die beiden Hauptleitungen im Fehlerausgang:
at com.company.SensorMaps.<init>(SensorMaps.java:11)
at com.company.Logic.<init>(Logic.java:19)
zu Linien beziehen:
private Logic sensorConnect = new Logic();
private SensorMaps mapAccess = new SensorMaps();
Der vollständige Fehlerausgang:
Exception in thread "main" java.lang.StackOverflowError
at com.company.SensorMaps.<init>(SensorMaps.java:11)
at com.company.Logic.<init>(Logic.java:19)
at com.company.SensorMaps.<init>(SensorMaps.java:11)
at com.company.Logic.<init>(Logic.java:19)
...
at com.company.SensorMaps.<init>(SensorMaps.java:11)
at com.company.Logic.<init>(Logic.java:19)
Lesen der Stack-Trace: Zeile 19 von Logic ruft Zeile 11 von SensorMaps auf, die wiederum die Zeile 19 von Logic aufruft. Eine unendliche Rekursion, also ein StackOverflowError. – toongeorges