有没有办法在 Iterator.next()
发生 ConcurrentModificationException
时打印出谁正在修改 ArrayList
?
最佳答案
如果这只是为了调试和临时故障排除,我可以建议使用动态java.lang.reflect.Proxy
。如果您控制 ArrayList 的创建,这将起作用。使用代理,您可以拦截迭代器的创建并为其创建代理。
基本上,在代理拦截的每个方法之前和之后添加日志记录。然后您可以分析日志以查看方法调用的流程。 要了解如何创建代理,有很多很棒的博客和示例,但我建议您从 Java Reflection Guide at Oracle Docs 开始。那里有一个与您需要的非常相似的示例。
HTH。
更新:当然,代理只能与接口(interface)一起使用,即仅当您在代码中不严格引用 ArrayList
时(实例化它除外)。否则,您需要重构代码以在声明中使用 List
而不是 ArrayList
...
关于Java如何知道谁在修改ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42333478/