尝试在另一个类中调用方法时,我得到java.lang.StackOverflowError
。
我认为问题是由于每个类在彼此之间实例化,但我不确定它为什么会导致此错误或如何修复它。
来自Main()的方法调用:
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)
答案 0 :(得分:5)
您的Logic
类会在实例化时创建SensorMaps
的实例。
private SensorMaps mapAccess = new SensorMaps();
您的SensorMaps
类会在实例化时创建Logic
的实例。
private Logic sensorConnect = new Logic();
因此,无论何时创建这两个类之一的实例,都会进入以StackOverflowError
结尾的无限循环。
你应该重新考虑你的逻辑,并消除这些实例变量中的至少一个(或者如果它有意义的话,将它们改为静态变量)。
我不知道你在哪里使用sensorConnect
,所以我不知道是否有必要。