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,所以我不知道是否有必要。