当尝试调用另一个类中的方法时,我得到一个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