當嘗試調用另一個類中的方法時,我得到一個java.lang.StackOverflowError
。Java - StackOverflowError - 訪問哈希映射
我認爲這個問題是由於每個類被相互實例化,但我不知道爲什麼它會導致這個錯誤或如何解決它。從主(
方法調用):
nexaConnect.returnAllChronologicalByRoom("bathroomSensorMappings");
邏輯():
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);
}
}
還有第三個MapRegistry類,但我不認爲這是造成問題,但我會包括它的完整性:
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);
}
}
在誤差輸出的兩個關鍵行:
at com.company.SensorMaps.<init>(SensorMaps.java:11)
at com.company.Logic.<init>(Logic.java:19)
參考線:
private Logic sensorConnect = new Logic();
private SensorMaps mapAccess = new SensorMaps();
完整的錯誤輸出:
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)
讀取堆棧軌跡:邏輯的第19行調用SensorMaps的第11行,它再次調用邏輯的第19行。一個無限遞歸,因此是一個StackOverflowError。 – toongeorges