別のクラス内のメソッドを呼び出すときにjava.lang.StackOverflowError
を取得しようとしています。Java - StackOverflowError - アクセスHashMaps
私はこの問題が、各クラスがお互いにインスタンス化されているためだと思いますが、なぜこのエラーが発生するのか、どうやって解決するのかはわかりません。メインから
メソッドの呼び出し():
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);
}
}
エラー出力における2つのキー行:
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)
スタックトレースを読みます:Logicの19行目はSensorMapsの11行目を呼び出し、Logicの19行目を再度呼び出します。無限再帰、したがってStackOverflowError。 – toongeorges