我正在处理一个有许多设计问题的遗留 Java 项目。结果,代码的某些部分没有按预期运行。考虑以下代码:
public enum Parent{
PARENT1(CHILD1, CHILD2), PARENT2(CHILD3, CHILD1),
PARENT3(CHILD4, CHILD2)
private Child [] children;
Parent(Child ...children) { this.children = children; }
public Child [] getChildren() { return this.children; }
}
public enum Child{ CHILD1, CHILD2, CHILD3, CHILD4 }
现在从上面的代码中,您可以清楚地看到 getChildren() 返回对数组的引用。因此,可以像这样更改数组的元素:
Child [] childrenOfParent3 = Parent3.getChildren();
childrenOfParent3[0] = null; //badcode
一些代码正在做类似上面提到的事情,我很难找到这个(grep 没有帮助)。
有没有什么工具可以帮助我使用 jvm 字节码分析来定位这个模式(坏代码),或者你会怎么做?
注意:由于某些限制,我无法更改父实现。
谢谢!