Java - StackOverflowError - 访问 HashMaps
Java - StackOverflowError - access HashMaps
我在尝试调用另一个 class 中的方法时收到 java.lang.WhosebugError
。
我认为问题是由于每个 class 在彼此内部实例化,但我不确定为什么会导致此错误或如何修复它。
来自 Main() 的方法调用:
nexaConnect.returnAllChronologicalByRoom("bathroomSensorMappings");
逻辑():
public class Logic {
private SensorMaps mapAccess = new SensorMaps();
void returnAllChronologicalByRoom(String room) {
System.out.print(mapAccess.returnMap(room).get(0));
}
}
传感器地图:
public class SensorMaps {
private Logic sensorConnect = new Logic();
HashMap<Integer, String> returnMap(String mapChoice) {
return MapRegistry.find(mapChoice);
}
}
还有第三个 MapRegistry class,但我不认为这会导致问题,但为了完整起见我将其包括在内:
地图注册表:
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.WhosebugError
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)
您的 Logic
class 会在实例化时创建 SensorMaps
的实例。
private SensorMaps mapAccess = new SensorMaps();
您的 SensorMaps
class 会在实例化时创建 Logic
的实例。
private Logic sensorConnect = new Logic();
因此,每当您创建这两个 class 之一的实例时,您都会进入以 WhosebugError
.
结束的无限循环
您应该 re-consider 您的逻辑,并至少消除其中一个实例变量(如果有意义,或者将它们更改为静态变量)。
我没看到你在哪里使用sensorConnect
,所以我不知道是否有必要。
我在尝试调用另一个 class 中的方法时收到 java.lang.WhosebugError
。
我认为问题是由于每个 class 在彼此内部实例化,但我不确定为什么会导致此错误或如何修复它。
来自 Main() 的方法调用:
nexaConnect.returnAllChronologicalByRoom("bathroomSensorMappings");
逻辑():
public class Logic {
private SensorMaps mapAccess = new SensorMaps();
void returnAllChronologicalByRoom(String room) {
System.out.print(mapAccess.returnMap(room).get(0));
}
}
传感器地图:
public class SensorMaps {
private Logic sensorConnect = new Logic();
HashMap<Integer, String> returnMap(String mapChoice) {
return MapRegistry.find(mapChoice);
}
}
还有第三个 MapRegistry class,但我不认为这会导致问题,但为了完整起见我将其包括在内:
地图注册表:
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.WhosebugError
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)
您的 Logic
class 会在实例化时创建 SensorMaps
的实例。
private SensorMaps mapAccess = new SensorMaps();
您的 SensorMaps
class 会在实例化时创建 Logic
的实例。
private Logic sensorConnect = new Logic();
因此,每当您创建这两个 class 之一的实例时,您都会进入以 WhosebugError
.
您应该 re-consider 您的逻辑,并至少消除其中一个实例变量(如果有意义,或者将它们更改为静态变量)。
我没看到你在哪里使用sensorConnect
,所以我不知道是否有必要。