在我的项目中有一个stackOVerFlow异常, 他们在迭代Map对象时在for循环中创建对象。
我怀疑通过调用循环内的其他类方法来创建这个复杂的对象会导致stackOverFlow。
对此的任何想法都将非常感激。
以下是JAVA中的代码
for (final Map.Entry<String, SomeBean> entry : actualBeanInfo.getPropertyMap().entrySet())
{
final SomeBean property = entry.getValue();
propName = property.getName();
if (property.getGetter() == null) {
continue;
}
if (ignoreProperty(property)) {
continue;
}
Object value = SomeBeanUtilities.getBeanProperty(obj, property);
value = SomeBeanUtilities.valueFromProperty(property, declaredType, null, value, context);
}
我觉得下面两行导致错误。
Object value = SomeBeanUtilities.getBeanProperty(obj, property);
value = SomeBeanUtilities.valueFromProperty(property, declaredType, null, value, context);
答案 0 :(得分:1)
在循环中执行某些操作(例如while
或for
循环)`不会导致堆栈溢出。保证。循环不会导致分配新的堆栈帧。
调用方法可以,特别是如果方法是直接或间接递归的。 (你可以在没有递归的情况下获得堆栈溢出,但它不太可能......除非你创建了堆栈太小的线程。)这同样适用于构造函数。
然而,知道这不会让你走得很远。如果要跟踪实际上导致堆栈溢出的内容,您需要查看堆栈跟踪和所涉及方法的代码。 (方法的主体 ...)
我怀疑......
不要浪费你的时间寻找基于“怀疑”的错误。收集并分析证据并使用它(以及良好的老式逻辑)指导您的错误搜寻。