Java如何知道谁在修改ArrayList?

标签 java arraylist

有没有办法在 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/

相关文章:

java - 如何更改数组列表中对象的属性?

java - 如果该方法返回枚举,则从 ArrayList 返回什么值?

java - 使用 for 每个循环来打印对象

java - 每次按下按钮时将值添加到 ArrayList<Number>

java - 创建 Rational Rhapsody 插件

java - 图像为空时数据未插入数据库

Java读取串口运行时在文本模式/二进制模式之间切换

java - 为什么 G1 提供更好的暂停时间但吞吐量较低?

java - 在Android Studio中创建UI并在Unity中使用它使元素跳转到0,0

java - 获取类的数组列表的索引。 java